首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >powershell判读Windows操作系统版本

powershell判读Windows操作系统版本

原创
作者头像
Windows技术交流
修改2026-07-22 13:16:22
修改2026-07-22 13:16:22
1.7K0
举报
文章被收录于专栏:Windows技术交流Windows技术交流

一些应用场景,需要做操作系统版本的前置判断,如下powershell代码我调试OK,适用PC、Server

代码语言:txt
复制
$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行

代码语言:javascript
复制
}
elseif ($installationType -eq "Server") {

写成

代码语言:javascript
复制
}elseif ($installationType -eq "Server") {

把下面这2行

代码语言:javascript
复制
}
else {

写成

代码语言:javascript
复制
}else {

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档