powershell是windows下检测补丁合规性最直接可靠的工具——无需安装客户端,可远程批量获取真实补丁状态并按基线自动比对;需按系统版本、时效阈值、补丁类型定义合规基线,用哈希表或json管理;通过get-hotfix、get-ciminstance等原生命令采集数据,invoke-command远程执行,兼容rodc;结果返回pscustomobject统一对象,含hostname、osversion、status等字段,缺失补丁自动标记;支持导出彩色html报表,并集成ad发现、权限校验、日志审计及告警推送。
powershell 是 windows 环境下检测安全补丁合规性最直接、最可靠的工具——它无需额外安装客户端,能远程批量获取真实补丁状态,并按策略自动比对是否达标。
明确补丁合规基线
不是所有补丁都同等重要。需先定义“哪些必须装、什么时候算过期”:
- 按系统版本区分基线:Windows Server 2019 和 2022 的关键 KB 编号不同,例如 KB5022913(2022 年 12 月安全更新)对前者是可选,对后者是强制项
- 设定时效阈值:等保2.0要求“系统补丁≤最新月度更新”,可定义为“最新已安装补丁距今不超过30天”
- 区分补丁类型:优先检查 Security Update、Critical Update 类别,忽略 Driver 或 Definition Update
- 用哈希表或 JSON 文件管理基线,例如:$Baseline = @{ 'Win2019' = @('KB5014697','KB5022913'); 'Win2022' = @('KB5022913','KB5033832') }
远程批量采集真实补丁数据
避免仅查注册表或 Windows Update 缓存,应调用原生命令获取实时安装记录:
- 使用 Get-HotFix 获取已安装补丁列表,加 -Description "Security Update" 过滤高危项
- 通过 Get-CimInstance Win32_OperatingSystem 获取 OS 版本与 BuildNumber,用于匹配基线
- 对每台目标主机用 Invoke-Command 执行,启用 -ErrorAction SilentlyContinue 防止单点失败中断全量检查
- 若遇只读域控制器(RODC),改用 Get-WmiObject -Class Win32_QuickFixEngineering 兼容查询
结构化比对与结果输出
返回统一对象,便于聚合、筛选和导出审计报告:
- 每个主机返回一个 [PSCustomObject],含字段:HostName、OSVersion、LatestKB、InstallDate、Status(Pass/Fail)、MissingKBs
- Status 判定逻辑示例:($latestKB.InstalledOn -ge (Get-Date).AddDays(-30)) -and ($installedKBs.Count -ge $baselineKBs.Count)
- 缺失补丁自动标记,例如:MissingKBs = ($baselineKBs | Where-Object {$_ -notin $installedKBs})
- 导出为带颜色的 HTML 报表:ConvertTo-Html -Fragment | Out-File report.html,高危项用红色背景突出
集成到日常运维流程
让检查真正落地,而不是跑一次就丢:
- 脚本开头加入管理员权限校验和 WinRM 连通性预检(Test-WSMan)
- 支持从 Active Directory 自动发现目标服务器:Get-ADComputer -Filter {OperatingSystem -like "*Server*"} -Property Name,IPv4Address
- 日志写入统一路径,含时间戳与执行人信息,满足审计留痕要求
- 可对接邮件或 Teams webhook,对 Fail 状态主机自动推送告警











