约 2015 字

约 10 分钟

#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> - 要筛选的对象,通常通过管道传入

#示例

使用脚本块筛选

> 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 类型。

#推荐阅读

更新: 2026/11/2

作者: planc

创建: 2026/11/2