比较运算符是什么
PowerShell 的比较运算符决定「怎么比」:等值比较判断两个值是否相同,通配比较按星号与问号做模式匹配,正则比较按表达式做子串匹配。三者语义差别很大,混用会让过滤结果偏离预期。它们还有一个容易被忽略的特性:当左侧是集合时,比较会返回满足条件的元素集合,等于一次隐式筛选,这在写条件判断时非常顺手,但也可能让脚本走在意料之外的分支。
基本信息
| 适用平台 | Windows PowerShell 5.1 与 PowerShell 7 及以上 |
|---|---|
| 等值类 | -eq 等于、-ne 不等于、-gt 与 -lt 等大小比较 |
| 通配类 | -like 支持星号与问号,-notlike 取反 |
| 正则类 | -match 子串正则匹配,-notmatch 取反 |
| 集合类 | -in 判断是否在集合中、-contains 判断集合是否含某值 |
| 大小写 | 默认不区分大小写,需要区分时使用带区分前缀的变体 |
| 集合语义 | 左侧为集合时返回匹配元素集合,可用于快速筛选 |
典型使用场景
- 按名称模式筛选文件或服务,例如以固定前缀开头的一批对象
- 按数值阈值过滤,例如内存占用高于某个值
- 按正则提取的时间或编号格式匹配日志行
- 用集合包含判断账户或主机是否在名单内
- 区分大小写核对特定写法,如证书主题与配置项
- 用集合语义直接筛选,省去额外的循环
常用示例
常用示例
# 等值比较
Get-Service | Where-Object Status -eq Running
# 通配比较:星号与问号
$name -like 'app_*'
# 正则比较:子串匹配
$line -match 'ERROR|WARN'
# 日期格式校验
'2026-10-12' -match '\d{4}-\d{2}-\d{2}'
# 集合语义:左侧是数组时返回命中元素
1,2,3,4 -gt 2
# 判断值是否在集合中
if ('web01' -in $hosts) { '在名单内' }
# 区分大小写
'Web' -clike 'web'
# 正则匹配后取分组
if ('v1.2.3' -match '(\d+)\.(\d+)') { $Matches[1] }运算符选择对照
| 需求 | 运算符 | 说明 |
|---|---|---|
| 完全相等 | -eq 与 -ne | 数值按数值比较,字符串默认忽略大小写 |
| 大小比较 | -gt 与 -lt 等 | 可用于数值与日期对象 |
| 模式匹配 | -like 与 -notlike | 只支持星号与问号,点号按字面处理 |
| 正则匹配 | -match 与 -notmatch | 子串匹配,需要整体锚定要写行首行尾 |
| 集合判断 | -in 与 -contains | 注意值与集合的左右顺序 |
| 区分大小写 | 带区分前缀的变体 | 用于精确核对写法 |
正则匹配成功后会保存整体与分组结果,可在后续语句里取用。需要只判断是否存在时也可以直接用它作为条件,但记得它是子串匹配,不是整体相等。
通配比较里的点号与方括号按字面处理,想按正则语义比较必须换成正则运算符。反过来,用正则运算符比较含特殊字符的字面内容时,要先转义。