powershell比较运算符需配合where-object筛选数据,以短横线开头(如-eq),默认不区分大小写;基础语法为“where 属性 运算符 值”,高级语法用{$_.属性...}脚本块处理多条件或嵌套属性。
在 powershell 基础中,比较运算符本身不直接“筛选数据”,而是配合 where-object(或其别名 where)来实现筛选。核心逻辑是:用比较运算符判断每个对象的属性是否满足条件,只保留返回 true 的对象,其余自动丢弃。
常用比较运算符怎么写
PowerShell 的比较运算符都以短横线开头(如 -eq),不使用数学符号(== 或 !=)。默认不区分大小写,适合日常管理任务:
-
-eq:等于("abc" -eq "ABC"→True) -
-ne:不等于 -
-gt/-lt:大于 / 小于(适用于数字、日期等可排序类型) -
-like:支持通配符的字符串匹配("service01" -like "serv*1"→True) -
-contains:检查集合是否包含某值(@(1,2,3) -contains 2→True)
区分大小写的版本加 c 前缀,比如 -ceq;显式不区分大小写可写 -ieq,但通常不用特别标注。
基础筛选语法:Where + 属性 + 运算符
这是初学者最易上手的方式,适合单条件筛选:
- 查所有正在运行的服务:
Get-Service | Where Status -eq Running - 查名称含 “win” 的进程:
Get-Process | Where Name -like "*win*" - 查 CPU 时间超过 10 秒的进程:
Get-Process | Where CPU -gt 10
注意:属性名必须拼写准确(如 Status 不能写成 Stat),否则命令静默返回空结果,不会报错。
高级筛选语法:用 {$_ ...} 写脚本块
当需要多条件、复杂逻辑或访问嵌套属性时,必须用大括号包裹的脚本块:
- 同时满足两个条件(已停止且启动类型为自动):
Get-Service | Where {$_.Status -eq 'Stopped' -and $_.StartType -eq 'Automatic'} - 按名称长度筛选(名称超过 5 个字符):
Get-Service | Where {$_.Name.Length -gt 5} - 排除特定服务名:
Get-Service | Where {$_.Name -notlike "WMI*" -and $_.Name -ne "Spooler"}
其中 $_ 是当前管道对象的占位符,所有属性和方法都通过它调用。
常见陷阱与提醒
实际操作中容易卡住的地方:
- 混淆
Format-*和Where-Object:前者只改显示样式,不影响后续处理;后者才真正删减对象 - 对数组属性误用标量运算符:比如
$_.DependentServices -eq "something"可能不按预期工作,应改用-contains或遍历 - 日期比较直接写字符串会失败,要用
[datetime]转换:Get-EventLog -Log System -Newest 10 | Where {$_.TimeGenerated -gt [datetime]"2026-07-01"} - 空值(
$null)参与比较可能返回意外结果,必要时先用$_.Property -ne $null做前置判断











