约 1944 字

约 10 分钟

#筛选 Where-Object

Where-Object 用于从管道中筛选对象,只有使条件表达式为真的对象才会继续传递到下游。

#语法形式

#脚本块形式

脚本块使用 { } 包裹,$_(或 $PSItem)表示当前管道对象:

命令 | Where-Object { 条件表达式 }

例如筛选 CPU 时间大于 10 秒的进程:

> Get-Process | Where-Object { $_.CPU -gt 10 }

#简化形式

简化形式直接指定属性、比较运算符和值:

> Get-Process | Where-Object -Property CPU -GT 10

也可以省略 -Property:

> Get-Process | Where-Object CPU -GT 10

简化形式适合单个属性、单个条件的简单筛选。

#常用比较运算符

运算符说明
-eq / -ne等于 / 不等于
-gt / -ge大于 / 大于等于
-lt / -le小于 / 小于等于
-like / -notlike通配符匹配 / 不匹配
-match / -notmatch正则表达式匹配 / 不匹配
-contains / -notcontains集合包含 / 不包含某个值
-in / -notin值是否在集合中

#示例

按文件扩展名筛选:

> Get-ChildItem -File | Where-Object { $_.Extension -eq '.ps1' }

按文件大小筛选,1MB 是 PowerShell 支持的数值后缀:

> Get-ChildItem -File | Where-Object -Property Length -GT 1MB

按名称通配符筛选:

> Get-ChildItem | Where-Object { $_.Name -like '*.md' }

使用 -and 组合多个条件:

> Get-Process | Where-Object { $_.CPU -gt 10 -and $_.WorkingSet64 -gt 100MB }

使用 -or 满足任一条件即可:

> Get-Process | Where-Object { $_.ProcessName -eq 'pwsh' -or $_.ProcessName -eq 'code' }

使用 -not 取反:

> Get-ChildItem -File | Where-Object { -not ($_.Extension -eq '.tmp') }

#注意事项

  • 字符串比较默认不区分大小写;需要区分时使用 -ceq、-clike 等带 c 前缀的运算符。
  • $_ 只在脚本块内有效,表示当前正在处理的对象。
  • 比较对象属性前,必要时先确认属性是否存在,避免意外的 $null 比较。

#推荐阅读

更新: 2026/11/2

作者: planc

创建: 2026/11/2