PowerShell脚本If判断字符串匹配失效问题求助
PowerShell字符串匹配问题排查方案
核心排查方向:区域文化差异与不可见字符
虽然日志显示两个值都是"Wed",但Get-Date -Format "ddd"的输出受系统区域文化设置影响,或存在肉眼不可见的隐藏字符,导致字符串实际不匹配。
具体排查与修复步骤
- 验证原始字节一致性:通过十六进制查看确认两个字符串的实际内容是否完全一致
# 查看$Today的原始字节 $Today | Format-Hex # 查看目标字符串的原始字节 "Wed" | Format-Hex
对比输出的字节序列,若不一致则说明存在编码或隐藏字符问题。
- 强制固定文化格式获取星期:避免系统区域影响,指定用英文文化获取标准缩写
# 强制使用英文(美国)文化获取星期缩写 $usCulture = [System.Globalization.CultureInfo]::GetCultureInfo("en-US") $Today = (Get-Date).ToString("ddd", $usCulture)
- 清理字符串中的干扰字符:若存在空白、零宽空格等不可见字符,用以下方式清理
# 去除首尾空白 $Today = $Today.Trim() $str_SwitchDay = $str_SwitchDay.Trim() # 或移除所有非字母字符 $Today = $Today -replace '[^a-zA-Z]', '' $str_SwitchDay = $str_SwitchDay -replace '[^a-zA-Z]', ''
- 修正$Counter递增逻辑:原脚本中
$Counter = [int]$Counter++存在逻辑错误,后置递增会先返回原值再递增,正确写法为:
$Counter++ if ($Counter -ge 5) { $Counter = 1 }
内容的提问来源于stack exchange,提问作者askitee
相关产品推荐
相关产品推荐

