如何通过PowerShell Get-ADComputer获取Windows扩展构建版本
问题原因
你原有命令无法获取扩展构建号的核心原因如下:
- Active Directory 中计算机对象的
OperatingSystemVersion属性仅存储Windows系统的基础版本构建号(例如10.0.19045),不会随系统累积补丁更新同步修订版本号,因此无法直接通过AD属性获取补丁对应的扩展构建段(即UBR,Update Build Revision,完整版本号的第四段,例如19045.3803里的3803)。 - 原命令存在拼写错误:参数
-Prperty正确写法为-Property。
可行解决方案
域环境下最通用的方案是通过PowerShell远程读取目标设备注册表中存储的完整版本信息,无需在设备上提前部署代理。
前置要求
- 运行脚本的域账号具备所有目标设备的本地管理员权限
- 目标设备开启WinRM服务(域环境可通过GPO批量开启,防火墙放行5985端口)
- 目标设备处于在线状态
可直接运行的脚本
# 导入Active Directory模块 Import-Module ActiveDirectory -ErrorAction Stop # 配置所在环境各Windows版本对应的最新扩展构建号,用于判断是否滞后 # 可根据微软每月补丁更新公告手动维护这个映射表 $latestBuildMap = @{ "19045" = 4170 # Windows 10 22H2 对应累积补丁的UBR值,可自行更新 "22621" = 3447 # Windows 11 22H2 最新UBR "22631" = 3447 # Windows 11 23H2 最新UBR } # 获取域内所有启用的计算机对象,可根据实际需求调整过滤规则 $computers = Get-ADComputer -Filter {Enabled -eq $true} -Properties Name, OperatingSystem, OperatingSystemVersion $report = @() foreach ($pc in $computers) { $result = [PSCustomObject]@{ 设备名称 = $pc.Name 操作系统 = $pc.OperatingSystem 基础版本号 = $pc.OperatingSystemVersion 完整扩展构建号 = "获取失败" 补丁状态 = "未知" 备注 = "" } try { # 远程读取注册表中的UBR值 $regBase = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $pc.Name) $regKey = $regBase.OpenSubKey('SOFTWARE\Microsoft\Windows NT\CurrentVersion') $currentBuild = $regKey.GetValue('CurrentBuild') $ubr = $regKey.GetValue('UBR') $fullBuild = "$currentBuild.$ubr" $result.完整扩展构建号 = $fullBuild # 对比最新构建号判断补丁状态 if ($latestBuildMap.ContainsKey($currentBuild)) { if ($ubr -ge $latestBuildMap[$currentBuild]) { $result.补丁状态 = "已安装最新补丁" } else { $result.补丁状态 = "版本滞后" } } else { $result.备注 = "未收录该版本的最新构建号基准" } $regKey.Close() $regBase.Close() } catch { $result.备注 = "设备连接失败,可能离线或未开放远程权限" } $report += $result } # 导出报告为CSV,可直接用Excel打开筛选统计 $report | Export-Csv -Path "Windows补丁安装状态报告.csv" -NoTypeInformation -Encoding UTF8
备选方案
如果环境部署了SCCM/MECM、Intune这类终端管理平台,直接从平台数据库拉取设备版本信息效率更高,不需要挨个遍历连接设备,也能覆盖离线设备的最近上报数据。
如果WinRM未批量开启,也可以通过GPO部署开机脚本,让设备开机时自动将自身完整版本号写入AD计算机对象的自定义扩展属性,后续直接查AD就能拿到数据,不需要远程连接。
注意:脚本里的
$latestBuildMap需要每月根据微软官方发布的累积补丁更新对应的UBR值,才能准确判断设备是否安装了最新补丁。
内容的提问来源于stack exchange,提问作者LB_34
相关产品推荐
相关产品推荐

