如何通过 PowerShell 验证 Windows 漏洞补丁是否安装成功?
核心结论:使用 PowerShell 命令Get-HotFix -Id KB4012598可在 1-3 秒内验证特定安全补丁是否安装,若返回空结果则表示系统存在 MS17-010 等高危漏洞风险。
原因分析
Windows 补丁安装状态验证之所以需要多种方法,是因为不同更新类型存储位置不同。通过 Windows Installer 安装的补丁会记录在 WMI 数据库中,可通过wmic qfe查询;但现代 CAB 包格式更新可能仅存储在组件化服务(CBS)日志中,路径为C:\Windows\Logs\CBS\CBS.log。当 wmic 缺失 KB 条目时,需使用 DISM 工具执行dism /online /get-packages | findstr "KB5012345"检查实际组件状态。此外,某些累积更新可能仅显示最新 KB 编号,旧补丁被合并隐藏,这导致单一验证方法存在漏报风险。
解决方案
方法一:PowerShell Get-HotFix 命令(推荐)
以管理员身份打开 Windows PowerShell,执行以下命令查询特定补丁:
Get-HotFix -Id KB3021917
若安装成功,返回信息包含 Security Update 描述、有效安装时间及 NT AUTHORITY\SYSTEM 安装主体。按安装日期倒序排列所有补丁使用:Get-HotFix | Sort-Object InstalledOn -Descending。此方法适用于快速验证单个或少量补丁,2023 年 12 月 29 日发布的 WannaCry 漏洞检测脚本即采用此原理。
方法二:批量域环境检测脚本
在 AD 域环境下,可使用以下脚本遍历所有计算机检测 MS17-010 补丁状态:
$computers = Get-ADComputer -Filter * | Select-Object -ExpandProperty Name
foreach ($computer in $computers) { Invoke-Command -ComputerName $computer -ScriptBlock { $hotfix = Get-HotFix -Id KB4012598 -ErrorAction SilentlyContinue; if ($hotfix) { Write-Output "$env:COMPUTERNAME is patched" } else { Write-Output "$env:COMPUTERNAME is vulnerable" } } }
2020 年 8 月 20 日发布的域客户端批量检测方案中,还可通过组策略设置注销脚本:Get-HotFix | Where-Object {$_.HotFixID -Like'KB 号'} >> \IP\共享文件夹路径\KB.CSV,共享文件夹需有写入权限。
方法三:事件日志验证法
通过事件查看器筛选 Windows 日志→系统,来源为“WindowsUpdateClient”的事件,关键 Event ID 包括:19(成功安装更新)、20(更新失败,查看附加错误码如 0x80070005)、43(安装开始)、44(回滚发生)。此方法可定位安装过程中的异常,2026 年 2 月 10 日的 Win11 补丁验证指南将其列为第五种验证方法。
方法四:注册表深度检测
导航到注册表路径HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages,查找含 KB 编号标识的包项,安装状态应为 Installed,且无 0x80240017 等错误代码。此方法适用于图形界面和命令行均无法确认时的深度排查。
注意事项
第一,wmic qfe 命令存在局限性,不识别现代 CAB 包更新,易漏报,2025 年 10 月 26 日的技术文档明确指出其“兼容性强但受限于 WMI 数据库完整性”。第二,某些安全补丁要求前置更新已安装,若缺失依赖,安装程序可能跳过核心操作,需先执行wusa /extract:KB5012345.msu /cab /temp:C:\temp提取依赖检查。第三,用户权限不足时无法访问完整日志,部分命令需管理员权限运行。第四,服务器已安装补丁但未重启时,2022 年 10 月 24 日的巡检脚本会显示“已安装补丁,需要重启”提示,此时漏洞修复尚未完全生效。第五,MS17-010 验证需对照微软官方表格,如 Windows 7 SP1 的 3 月仅安全更新 KB4012212 对应 srv.sys 版本号 6.1.7601.23689,2017 年 6 月 27 日的官方支持文档提供了完整版本对照表。
参考来源
来源:Microsoft Support - 如何验证是否已安装 MS17-010(2017 年 6 月 27 日)
来源:CSDN 博客 - 用 Powershell 命令批量获取域客户端某个补丁是否安装(2020 年 8 月 20 日)
来源:51CTO 博客 - PowerShell 脚本批量检测公司服务器是否存在 WannaCry 漏洞(2023 年 12 月 29 日)
来源:CSDN 博客 - Win11 怎么查看系统漏洞补丁已安装更新列表导出(2026 年 2 月 10 日)