如何实现带更新描述与独立KB列的热修复报告自动化脚本?
完善PowerShell热修复报告脚本:同时获取更新描述与独立KB列
我来帮你完善这个PowerShell脚本,解决同时获取更新描述和独立KB列的问题——这确实是个常见的痛点,Get-Hotfix太精简,Win32_ReliabilityRecords又需要额外处理数据。
完整脚本示例(推荐现代PowerShell版本)
# 使用Get-CimInstance替代旧版Get-WmiObject,性能更优 Get-CimInstance -ClassName Win32_ReliabilityRecords | Where-Object { $_.EventID -eq 19 } | # 仅筛选Windows更新安装事件 Select-Object @{LABEL = "安装日期"; EXPRESSION = { $_.TimeGenerated } }, @{LABEL = "KB编号"; EXPRESSION = { # 用正则匹配括号内的KB编号 if ($_.Message -match '\((KB\d+)\)') { $matches[1] } else { "未检测到KB编号" } }}, @{LABEL = "更新描述"; EXPRESSION = { # 清理描述:去掉末尾的KB标记和前缀冗余文本 $cleanDesc = $_.Message -replace '\s*\(KB\d+\)$', '' $cleanDesc -replace '^安装了更新\s*', '' }}
关键细节说明
- 筛选有效事件:
Win32_ReliabilityRecords包含大量系统事件,通过EventID -eq 19精准定位Windows更新安装记录,过滤无关信息。 - 精准提取KB编号:用正则表达式
\((KB\d+)\)匹配括号中的KB编号,通过$matches[1]直接提取编号内容,确保单独成列。 - 优化更新描述:通过两次
-replace操作,移除描述末尾的KB标记和开头的冗余前缀(比如“安装了更新 ”),让描述更清晰。 - 推荐使用Get-CimInstance:微软官方更推荐
Get-CimInstance替代老旧的Get-WmiObject,它支持更多现代特性,性能表现也更好。
适配旧版PowerShell的脚本(v2及以下)
如果你的系统运行的是较旧的PowerShell版本,把Get-CimInstance换回Get-WmiObject,同时注意时间格式转换:
Get-WmiObject -Class Win32_ReliabilityRecords | Where-Object { $_.EventID -eq 19 } | Select-Object @{LABEL = "安装日期"; EXPRESSION = { $_.ConvertToDateTime($_.TimeGenerated) } }, @{LABEL = "KB编号"; EXPRESSION = { if ($_.Message -match '\((KB\d+)\)') { $matches[1] } else { "未检测到KB编号" } }}, @{LABEL = "更新描述"; EXPRESSION = { $cleanDesc = $_.Message -replace '\s*\(KB\d+\)$', '' $cleanDesc -replace '^安装了更新\s*', '' }}
额外优化:导出为CSV报告
如果需要生成可编辑的报告文件,只需在脚本末尾追加导出命令:
| Export-Csv -Path "热修复报告.csv" -Encoding UTF8 -NoTypeInformation
这样就能得到包含安装日期、KB编号、更新描述三列的CSV文件,方便后续分析或分享。
内容的提问来源于stack exchange,提问作者Alen
相关产品推荐
相关产品推荐

