首页/系统/Windows 运维速查/比较运算符 -eq -like -match
PowerShell 基础66 条

比较运算符 -eq -like -match

三种常用比较语义:-eq 精确相等、-like 通配符、-match 正则;混用会导致过滤结果偏差。

Windows 运维速查系统更新于 2026-10-13

比较运算符是什么

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注意值与集合的左右顺序
区分大小写带区分前缀的变体用于精确核对写法
正则匹配成功后会保存整体与分组结果,可在后续语句里取用。需要只判断是否存在时也可以直接用它作为条件,但记得它是子串匹配,不是整体相等。
通配比较里的点号与方括号按字面处理,想按正则语义比较必须换成正则运算符。反过来,用正则运算符比较含特殊字符的字面内容时,要先转义。

易错点

  • 用通配运算符做正则匹配:点号与方括号按字面处理,结果与预期不符
  • 把正则匹配当成整体相等:它是子串匹配,需要精确相等应改用等值比较或加锚定
  • 忽略大小写默认行为:字符串比较默认不区分大小写,需要精确匹配时要用区分变体
  • 集合与值写反:判断值是否在集合中与判断集合是否含该值,方向写错会得到相反结论
  • 在数值比较中使用字符串:类型不同会先转换或直接报错,比较前先确认类型

数据来源与参考

  • Microsoft Learn:about_Comparison_Operators

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌