这种形式Get-Process | Where ProcessName -match "win"
称为比较语句。这不是一个记录在案的功能,因为Where-Object
's 的文档并没有真正解释那些是关于什么的。
比较语句适用Get-Process
但不适用于的原因$stuff
是前者返回一个System.Diagnostics.Process
对象数组,而后者是String
。比较语句需要用于过滤的属性名称。
让我们看看每个数组成员中可用的内容。首先像这样的过程,
$proc = get-process
gm -InputObject $proc[0] -MemberType property
TypeName: System.Diagnostics.Process
Name MemberType Definition
...
ProcessName Property string ProcessName {get;}
...
所以,有一个ProcessName
属性,因此Where-Object
可以用它过滤。
字符串数组:
$stuff = @("foo", "bar", "zoffo", "qazzer")
gm -InputObject $stuff[0] -MemberType property
TypeName: System.String
Name MemberType Definition
Length Property int Length {get;}
a 中只有一个属性,String
即它的长度。果然可以像这样用来过滤,
$stuff | where length -ne 3
zoffo
qazzer
$stuff | where length -eq 3
foo
bar
由于没有其他属性类型的成员,过滤字符串数组的唯一方法是通过经典的脚本块模式。