PowerShell版本字符串相等性判断返回False的异常问题求助
PowerShell版本字符串相等性判断返回False的异常问题求助
这问题我之前也踩过坑!核心原因就是wmic命令返回的字符串里藏着你看不见的空白字符(比如回车符\r、换行符\n),虽然从控制台输出看和你手动定义的$versionString完全一样,但实际内容并不相同,这就导致了相等性判断返回False。
你可以通过以下命令验证这个差异:
# 对比两个字符串的长度 $version[2].Length $versionString.Length # 输出每个字符的ASCII编码,查看隐藏字符 $version[2] | ForEach-Object { [int][char]$_ } $versionString | ForEach-Object { [int][char]$_ }
执行后你会发现,$version[2]的长度比$versionString长,而且末尾会多出13(对应回车符)和10(对应换行符)的编码,这些就是导致判断不相等的元凶。
这里给你两个解决思路:
- 快速修复现有代码:用
Trim()方法去掉字符串前后的所有空白字符,包括隐藏的换行/回车:
$version[2].Trim() -eq $versionString
这样就能得到正确的True结果了。
- 更优雅的替代方案:放弃
wmic,改用PowerShell原生的Get-CimInstance命令获取产品信息,它返回的是干净的字符串,不会有多余的空白问题:
# 直接获取目标产品的版本字符串 $version = (Get-CimInstance Win32_Product | Where-Object { $_.Caption -like '*Citrix Workspace Inside*' }).Version # 直接进行相等性判断 $version -eq $versionString
另外补充一句:虽然GetType()显示两者都是String类型,但类型相同不代表内容完全一致——那些隐藏的空白字符也是字符串的一部分,自然会让相等性判断失败。
备注:内容来源于stack exchange,提问作者PumpkinBreath
相关产品推荐
相关产品推荐

