如何获取Windows Server中当前已安装的补丁列表?
获取Windows Server当前实际已安装的补丁列表
嘿,你之前用的QueryHistory方法确实是拿更新操作的历史记录——不管补丁现在是不是还在系统里,只要曾经安装/卸载过,都会留下记录,所以卸载后的补丁自然还会显示出来。要获取当前系统实际已安装的补丁,得换个思路,直接查询系统里现存的更新项,给你几个靠谱的方法:
方法1:快速查看KB类补丁(Get-HotFix)
这是最常用的快速方法,直接返回已安装的KB编号补丁,适合日常排查:
Get-HotFix | Select-Object HotFixID, Description, InstalledOn, InstalledBy
注意:这个命令基于WMI的
Win32_QuickFixEngineering类,优点是简单快捷,但只包含通过Windows Update安装的KB类补丁,像.NET框架更新、部分系统组件更新这类非KB的更新可能不会被列出。
方法2:获取完整的已安装更新(Microsoft.Update.Session)
和你原来用的COM对象属于同一体系,但我们要搜索当前已安装的更新,而不是历史记录:
$session = New-Object -ComObject Microsoft.Update.Session $searcher = $session.CreateUpdateSearcher() # 设置搜索范围为本地机器的已安装更新 $searcher.SearchScope = 1 # 搜索所有已安装的更新 $results = $searcher.Search("IsInstalled=1") | Select-Object -ExpandProperty Updates # 提取关键信息输出 $results | Select-Object Title, KBArticleIDs, InstalledOn, IsInstalled
这个方法会返回所有通过Windows Update渠道安装的已更新项,包括KB补丁、功能更新、驱动更新、系统组件更新等,比Get-HotFix覆盖范围更全。其中KBArticleIDs字段会列出对应KB编号(部分更新可能无KB号),IsInstalled字段明确显示为True,确保是当前实际存在的补丁。
方法3:底层系统更新查询(DISM命令)
如果需要排查系统更新的底层组件包信息,可以用DISM命令:
# 查看所有已安装的系统包(表格格式) dism /online /get-packages /format:table
或者筛选已安装的更新包:
dism /online /get-packages | Where-Object { $_ -match "Package Identity" -and $_ -match "Installed" }
DISM返回的是系统组件级别的包信息,适合系统修复、离线更新排查等场景,但输出格式相对繁琐。
额外提示
- 运行这些命令需要管理员权限,否则可能无法获取完整的更新信息;
- 如果需要过滤特定类型的更新(比如只看累积更新),可以在方法2的搜索语句里添加条件,例如:
"IsInstalled=1 and Title like '%Cumulative Update%'"。
内容的提问来源于stack exchange,提问作者hasini
相关产品推荐
相关产品推荐

