You need to enable JavaScript to run this app. 如何使用PowerShell查询所有已安装Windows更新的名称、KB编号等完整信息
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PowerShell查询所有已安装Windows更新的名称、KB编号等完整信息

PowerShell 获取含CVE、严重等级的已安装Windows更新方案

旧方案失效原因

  • Get-HotFix、wmic qfe list、Win32_QuickFixEngineering类仅返回QFE(快速修复工程)类更新,不会覆盖累积更新、Office更新、驱动更新等全量更新,因此仅能返回KB编号字段
  • 注册表Component Based Servicing\Packages路径仅记录组件服务相关的更新包,无法覆盖所有系统更新条目
  • 原搜索脚本使用IsPresent=1作为查询条件,会包含安装失败、待卸载的非生效更新,无法精准匹配已安装生效的更新,也未做字段映射处理

完整实现脚本

# 初始化Windows更新会话
$updateSession = New-Object -ComObject Microsoft.Update.Session
$updateSearcher = $updateSession.CreateUpdateSearcher()

# 精准搜索所有已安装生效的更新
$searchResult = $updateSearcher.Search("IsInstalled=1")
$allInstalledUpdates = $searchResult.Updates

# 提取所需字段并格式化输出
$outputList = foreach ($update in $allInstalledUpdates) {
    # 处理KB编号,一个更新可能对应多个KB
    $kbNum = $update.KBArticleIDs -join "、"
    # 处理CVE编号,非安全更新无该字段
    $cveList = $update.CveIDs -join "、"
    # 映射严重等级为可读文本
    $severityMap = @{
        0 = "未指定"
        1 = "低危"
        2 = "中危"
        3 = "高危"
        4 = "严重"
    }
    $severity = $severityMap[[int]$update.MsrcSeverity] ?? "无安全评级"

    [PSCustomObject]@{
        "更新名称" = $update.Title
        "KB编号" = if ($kbNum) { $kbNum } else { "无KB编号" }
        "CVE ID" = if ($cveList) { $cveList } else { "无关联CVE" }
        "严重等级" = $severity
    }
}

# 控制台输出结果,如需导出到文件可追加 | Export-Csv -Path "C:\更新列表.csv" -Encoding UTF8 -NoTypeInformation
$outputList | Format-Table -AutoSize

注意事项

  • 运行脚本需要管理员权限,否则会无法读取部分系统级更新的属性
  • 功能性更新、驱动更新本身不关联CVE和安全评级,对应字段返回默认值属于正常情况
  • 如需查询更新历史(含安装失败、已卸载的更新),可将搜索条件替换为"IsPresent=1"

内容的提问来源于stack exchange,提问作者Vitalia Kontanistova

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 18:30:01