
一些应用场景,需要做操作系统版本的前置判断,如下powershell代码我调试OK,适用PC、Server
$regPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
try {
# 一次性读取注册表,避免重复访问
$cv = Get-ItemProperty -Path $regPath -ErrorAction Stop
} catch {
throw "无法读取 Windows 版本信息:$($_.Exception.Message)"
}
$installationType = [string]$cv.InstallationType
$buildNumber = [int]$cv.CurrentBuildNumber
if ($null -ne $cv.UBR) {
$ubr = [int]$cv.UBR
} else {
$ubr = 0
}
$displayVersion = [string]$cv.DisplayVersion
$productName = [string]$cv.ProductName
if ([Environment]::Is64BitOperatingSystem) {
$osArchitecture = "64-bit"
} else {
$osArchitecture = "32-bit"
}
# 精细内部版本,例如 26200.8246
$osBuild = "{0}.{1}" -f $buildNumber, $ubr
if ($null -ne $cv.CurrentMajorVersionNumber) {
$majorVersion = [int]$cv.CurrentMajorVersionNumber
} else {
$majorVersion = 10
}
if ($null -ne $cv.CurrentMinorVersionNumber) {
$minorVersion = [int]$cv.CurrentMinorVersionNumber
} else {
$minorVersion = 0
}
# 完整版本,例如 10.0.26200.8246
$fullVersion = "{0}.{1}.{2}.{3}" -f `
$majorVersion, `
$minorVersion, `
$buildNumber, `
$ubr
if ($installationType -eq "Client") {
if ($buildNumber -ge 22000) {
$osVersion = "Windows 11"
# 某些 Windows 11 会兼容性保留 Windows 10 ProductName
if ($productName -match "\bWindows 10\b") {
$productName = $productName -replace `
"\bWindows 10\b", `
"Windows 11"
} elseif ($productName -notmatch "\bWindows 11\b") {
$productName = "Windows 11"
}
} elseif ($buildNumber -ge 10240) {
$osVersion = "Windows 10"
} else {
$osVersion = "未知客户端版本"
}
} elseif ($installationType -like "Server*") {
if ($buildNumber -ge 26100) {
$osVersion = "Windows Server 2025"
} elseif ($buildNumber -ge 20348) {
$osVersion = "Windows Server 2022"
} elseif ($buildNumber -ge 17763) {
$osVersion = "Windows Server 2019"
} elseif ($buildNumber -ge 14393) {
$osVersion = "Windows Server 2016"
} else {
$osVersion = "Windows Server"
}
} else {
$osVersion = "未知版本"
}
[pscustomobject][ordered]@{
OSType = $installationType
OSVersion = $osVersion
DisplayVersion = $displayVersion
CurrentBuildNumber = $buildNumber
UBR = $ubr
OSBuild = $osBuild
FullVersion = $fullVersion
ProductName = $productName
OSArchitecture = $osArchitecture
} | Format-List
注意事项:
powershell中,elseif、else前后不要换行,否则可能会有异常。
例如:
把下面这2行
}
elseif ($installationType -eq "Server") {写成
}elseif ($installationType -eq "Server") {把下面这2行
}
else {写成
}else {原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。