You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell OS版本判断异常:10.0.14393被误判为低于6求助

这问题我太熟了!你踩了PowerShell字符串比较的坑,核心原因是你现在做的不是版本号比较,而是字符串和数字的不恰当对比。

问题根源

你用(Get-WmiObject Win32_OperatingSystem).Version拿到的是字符串类型的版本值(比如你的"10.0.14393"),当你用-lt 6做比较时,PowerShell会把数字6转成字符串"6",然后按字符的ASCII码逐个对比:"10.0.14393"的第一个字符是'1',而"6"的第一个字符是'6','1'的ASCII值比'6'小,所以整个字符串会被判定为小于"6"——这就是为什么明明你的OS是10版本,却被提示低于6。

而你用普通数字比较正常,是因为那时候两边都是数值类型,PowerShell会按数值大小判断,自然没问题。

正确的版本号比较方法

最可靠的方式是把版本字符串转换成PowerShell的[version]类型,它会自动解析版本号的主版本、次版本、构建号等部分,按版本规则进行比较:

# 推荐用Get-CimInstance替代已弃用的Get-WmiObject
$verCheckOS = [version](Get-CimInstance Win32_OperatingSystem).Version
if ($verCheckOS -lt [version]"6.0") {
    Write-Host -ForegroundColor Red "Version is too low, $verCheckOS"
} else {
    Write-Host -ForegroundColor Green "OS version is good, $verCheckOS"
}

如果你只关心主版本号(比如判断是否低于Windows Vista/Server 2008的主版本6),也可以拆分字符串提取主版本:

$osVersionStr = (Get-CimInstance Win32_OperatingSystem).Version
$majorVersion = [int]$osVersionStr.Split('.')[0]
if ($majorVersion -lt 6) {
    Write-Host -ForegroundColor Red "Version is too low, $osVersionStr"
} else {
    Write-Host -ForegroundColor Green "OS version is good, $osVersionStr"
}

第一种方法更灵活,比如你需要判断是否大于6.1(Windows 7/Server 2008 R2),直接写$verCheckOS -lt [version]"6.1"就可以,不需要手动拆分。

内容的提问来源于stack exchange,提问作者Adam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:07:32