PowerShell获取Windows版本修订号 (UBR) 的方法
2025-01-05 12:42:41
PowerShell 获取 Windows 版本修订号
获取 Windows 系统版本信息,是许多自动化任务和系统诊断的常见需求。PowerShell 提供了多种方式来获取系统版本信息,但通常获取到的仅是操作系统的主版本号、次版本号、和内部版本号。然而,操作系统会通过不定期的补丁更新(Update Build Revision, UBR),而版本修订号恰恰记录了这些更新。有时,准确的 UBR 对问题排查至关重要。本文将介绍几种使用 PowerShell 获取 Windows 版本修订号的方法。
方法一: 使用 Get-ItemProperty
命令和注册表
Windows 系统版本修订号存储在注册表中,可通过 PowerShell 的 Get-ItemProperty
cmdlet 读取相关注册表项。Get-ItemProperty
可以从特定的注册表路径读取指定的值。要读取版本修订号,我们可定位到 HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion
,该路径存储着系统版本信息。我们所需的数据名称是 UBR
。
代码示例:
$registryPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
$registryProperty = "UBR"
$ubr = (Get-ItemProperty -Path $registryPath -Name $registryProperty).UBR
Write-Output "Windows Update Build Revision (UBR): $ubr"
操作步骤:
- 打开 PowerShell 控制台。
- 复制并粘贴以上代码到控制台。
- 按下
Enter
键执行。 - PowerShell 将输出 UBR 的值。
这个方法直接读取注册表值,无需其他辅助命令,执行效率较高。如果用户具有读取注册表权限,该方法适用范围广,操作简单。
方法二: 使用 Get-WmiObject
命令查询 WMI
Windows Management Instrumentation (WMI) 提供了系统信息的管理接口。PowerShell 通过 Get-WmiObject
cmdlet 可以查询 WMI 中的信息。可以利用 WMI 查询 Win32_OperatingSystem
类中的 BuildNumber
属性和 BuildRevision
属性。但是值得注意的是 BuildRevision
可能并非直接对应着 UBR。
代码示例:
$os = Get-WmiObject -Class Win32_OperatingSystem
$buildNumber = $os.BuildNumber
$buildRevision = $os.BuildRevision
Write-Output "Windows Build Number: $buildNumber"
Write-Output "Windows Build Revision (WMI): $buildRevision"
$ubr = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name 'UBR').UBR
Write-Output "Windows Update Build Revision (UBR): $ubr"
操作步骤:
- 打开 PowerShell 控制台。
- 复制并粘贴上述代码至 PowerShell 控制台。
- 按
Enter
执行代码。 - PowerShell 将会输出 Windows 的 Build Number, 通过WMI读取到的BuildRevision值,和 通过注册表读取到的 UBR值.
注意: 这里对比 WMI 读取的BuildRevision 和 注册表中读取的 UBR 发现,这两个值在绝大多数情况下是不一样的,要获取准确的版本修订号(UBR) 需要使用从注册表获取到的数据. 此方法虽然提供了多个版本信息,但重点依旧是从注册表读取的 UBR。
方法三:使用 [System.Environment]::OSVersion
类和 Get-CimInstance
还可以使用 .NET framework 提供的方法以及 PowerShell Get-CimInstance
命令结合查询。这种方法侧重于对象的使用。但是类似Get-WmiObject
, 使用此方法返回的 BuildNumber 也并不能直接表示版本修订号。
代码示例:
$osVersion = [System.Environment]::OSVersion
Write-Output "Windows Version Object: $osVersion"
$cimOS = Get-CimInstance -ClassName Win32_OperatingSystem
Write-Output "OS Build Number via CIM: $($cimOS.BuildNumber)"
$ubr = (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name 'UBR').UBR
Write-Output "Windows Update Build Revision (UBR): $ubr"
操作步骤:
- 打开 PowerShell 控制台。
- 复制并粘贴上述代码到 PowerShell 控制台。
- 按回车键执行。
- PowerShell将输出操作系统的版本对象、从CIM获取的Build Number, 以及 从注册表读取到的UBR。
同样的,要获取准确的 Windows 系统版本修订号,建议使用从注册表直接获取的方式 (方法一
). 其余方式只能提供参考,而非直接对应的值。
安全建议
使用以上 PowerShell 脚本时,需谨慎处理涉及注册表的操作。误修改注册表可能会导致系统问题,故此方法务必在明确了解的前提下执行。推荐仅执行只读操作,避免对注册表进行写入操作。另外,执行脚本的账号需具有足够的权限才能成功读取注册表数据。始终审查下载自不可靠来源的代码,在生产环境中运行前应充分测试。
总的来说,虽然Windows提供了几种查询系统版本信息的方法,但在查询Windows版本修订号(UBR) 时,最佳方案仍然是通过直接访问注册表来实现。 使用 Get-ItemProperty
方法简明且直接,能可靠地获得系统版本修订号。