#PowerShell 的 Where-Object 命令
Where-Object
[-FilterScript] <ScriptBlock>
[-InputObject <PSObject>]
[<CommonParameters>]
Where-Object
[-Property] <String>
[[-Value] <Object>]
[-InputObject <PSObject>]
[-EQ]
[<CommonParameters>]
功能
从对象集合中筛选出满足条件的对象,只有条件为真的对象才会继续沿管道传递。
类型
Cmdlet,属于 Microsoft.PowerShell.Core。
参数
[-FilterScript] <ScriptBlock>- 筛选脚本块,$_表示当前管道对象;位置 0,参数名可省略-Property <String>- 简写语法中要比较的属性名;位置 0,参数名可省略[-Value] <Object>- 简写语法中要比较的值;位置 1,参数名可省略-EQ、-NE、-GT、-GE、-LT、-LE- 等于、不等于、大于、大于等于、小于、小于等于-Like、-NotLike- 使用通配符匹配-Match、-NotMatch- 使用正则表达式匹配-Contains、-NotContains、-In、-NotIn- 判断集合是否包含指定值-Is、-IsNot- 判断属性是否为指定 .NET 类型-Not- 属性不存在,或值为$null、$false-InputObject <PSObject>- 要筛选的对象,通常通过管道传入
脚本块语法与简写语法功能等价;需要组合多个条件时,只能使用脚本块配合
-and、-or、-not。
#示例
使用脚本块筛选
> Get-Process | Where-Object { $_.CPU -gt 10 }
$_代表管道中的当前对象,只有CPU大于 10 的进程才会输出。
使用简写语法筛选
> Get-Process | Where-Object CPU -GT 10
> Get-Process | Where-Object -Property CPU -GT -Value 10
- 上面两条命令与前一个示例等价,简写语法更易读。
按名称通配符筛选
> Get-ChildItem -File | Where-Object Name -Like '*.md'
-Like支持*和?通配符。
组合多个条件
> Get-Process | Where-Object {
$_.CPU -gt 10 -and $_.WorkingSet64 -gt 100MB
}
- 逻辑运算符只能写在脚本块中。
筛选缺少某属性的对象
> Get-Service | Where-Object -Not DependentServices
-Not表示属性不存在,或值为$null、$false。
按类型筛选
> Get-Process | Where-Object StartTime -Is [datetime]
-Is用于判断属性值的 .NET 类型。