需确保账户对所有域控制器有本地管理员权限且WinRM启用;先用Get-ADDomainController获取域控列表,再通过Invoke-Command远程执行Get-HotFix筛选关键KB补丁,结合哈希表比对缺失项,结构化输出并记录日志。
确认域控制器列表并获取管理员权限
脚本运行前需确保当前账户对所有域控制器具有本地管理员权限,且能通过 powershell 远程执行(winrm 已启用)。建议先用 get-addomaincontroller -filter * | select-object name, ipv4address 获取全域控列表,保存为变量或 csv 文件,避免硬编码。若环境含只读域控制器(rodc),需单独处理其补丁查询限制(无法直接运行 get-hotfix)。
远程调用 Get-HotFix 并筛选关键补丁
对每台域控制器使用 Invoke-Command 执行 Get-HotFix,推荐按 KB 编号过滤高危或近期安全更新,例如:
- KB5004237、KB5014697、KB5022913 等 Windows Server 2019/2022 关键累积更新
- 结合
-Description "Security Update"或-HotFixID "KB*"提升准确性 - 添加
-ErrorAction SilentlyContinue避免单台失败中断整个检查
结构化输出与缺失补丁识别
将结果整理为自定义对象,包含服务器名、补丁 KB 号、安装时间、状态(已安装/缺失),再对比预设的“必需补丁清单”。可借助哈希表定义基线,例如:
$RequiredKBs = @{'DC01' = @('KB5022913','KB5014697'); 'DC02' = @('KB5022913')}对每台 DC 检查其 Get-HotFix 结果是否包含全部对应 KB,缺失项单独标记并导出为 CSV 或彩色 HTML 报表(用 ConvertTo-Html + 内联样式)。
加入超时与日志记录提升可靠性
生产环境建议设置合理超时(-SessionOption (New-PSSessionOption -OperationTimeoutSec 60)),防止某台响应缓慢拖慢整体进度。每次连接后记录时间戳和成功状态到本地日志文件,例如:
- 用
Out-File -Append记录每台 DC 的检查起止时间与错误摘要 - 最终汇总统计:共检查 X 台,Y 台缺失关键补丁,Z 台连接失败
- 可选集成邮件发送(
Send-MailMessage)将摘要自动发给运维组

















