PowerShell中字符串类型版本号比较失效问题求助
版本号比较问题的解决方案
问题原因
你遇到的问题核心在于$soft.DisplayVersion是字符串类型,直接用-lt比较时,PowerShell会按字典序(字符ASCII码顺序)判断大小:
- "95.0"的第一个字符是'9',"124.0"的第一个字符是'1'
- 由于'9'的ASCII码大于'1',字符串比较会返回
False,和你预期的数值大小比较结果不符。
正确解法
将版本号转换为专门的[version]类型(.NET的System.Version),它会按版本号的分段(主版本、次版本、修订号等)进行数值比较:
方法1:直接转换后比较
[version]$soft.DisplayVersion -lt [version]"124.0"
执行后会返回预期的True。
方法2:显式解析为Version对象
如果需要重复使用版本号,可先解析为对象再比较:
$currentVer = [System.Version]::Parse($soft.DisplayVersion) $targetVer = [System.Version]::Parse("124.0") $currentVer -lt $targetVer
特殊场景处理(语义化版本)
如果版本号包含预发布标签(如124.0-beta),[version]无法解析,可使用PowerShell 7+支持的[semver]类型处理语义化版本:
[semver]$soft.DisplayVersion -lt [semver]"124.0"
内容的提问来源于stack exchange,提问作者S. Me
相关产品推荐
相关产品推荐

