You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何列出Windows服务器上包含被取代更新的全部更新列表?

如何列出Windows服务器上包含被取代更新的全部更新列表?

这个问题我太有共鸣了——之前做审计的时候也碰到过一模一样的情况,常规工具清一色把被后续补丁取代的旧更新给过滤掉了,完全满足不了追溯每月更新安装记录的需求。给你几个亲测靠谱的方法:

1. 用PowerShell调用Windows Update COM接口(最推荐)

这个方法能直接从系统的更新历史数据库里拉取所有更新记录,包括被取代的,还能明确标记哪些更新已经被取代,非常适合审计出报告。

执行下面的PowerShell脚本:

# 创建Windows Update会话对象
$updateSession = New-Object -ComObject Microsoft.Update.Session
$updateSearcher = $updateSession.CreateUpdateSearcher()

# 获取更新历史总条数并查询全部记录
$historyCount = $updateSearcher.GetTotalHistoryCount()
$updateHistory = $updateSearcher.QueryHistory(0, $historyCount)

# 格式化输出关键信息
foreach ($update in $updateHistory) {
    [PSCustomObject]@{
        安装日期 = $update.Date
        更新标题 = $update.Title
        KB编号 = ($update.KBArticleIDs -join ', ')
        是否已被取代 = $update.IsSuperseded
        更新唯一ID = $update.UpdateID
    }
}

如果需要归档,还可以把结果导出成CSV文件:

# 导出为CSV文件
$updateHistory | Select-Object @{Name='安装日期';Expression={$_.Date}},@{Name='更新标题';Expression={$_.Title}},@{Name='KB编号';Expression={$_.KBArticleIDs -join ', '}},@{Name='是否已被取代';Expression={$_.IsSuperseded}} | Export-Csv -Path "C:\ServerUpdateHistory.csv" -Encoding UTF8 -NoTypeInformation

2. 检查CBS日志(最原始的安装痕迹)

Windows的组件服务日志(CBS.log)会记录所有更新安装的原始细节,不管后续有没有被取代,都会留下痕迹。日志路径是C:\Windows\Logs\CBS\CBS.log,可以用PowerShell过滤出关键内容:

# 过滤出更新安装相关的记录,取最近50条
Get-Content "C:\Windows\Logs\CBS\CBS.log" | Select-String "Installing update" | Select-Object -Last 50

如果需要指定时间范围(比如2024年1月),可以这样过滤:

Get-Content "C:\Windows\Logs\CBS\CBS.log" | Where-Object {$_ -match "2024-01"} | Select-String "Installing update"

3. 查看Windows Update操作事件日志

系统的WindowsUpdateClient操作日志会完整记录每一次更新的安装事件,不会因为更新被取代而删除记录。可以通过PowerShell快速查询事件ID为19(更新成功安装)的记录:

Get-WinEvent -LogName "Microsoft-Windows-WindowsUpdateClient/Operational" | Where-Object {$_.Id -eq 19} | ForEach-Object {
    [PSCustomObject]@{
        安装时间 = $_.TimeCreated
        KB编号 = ($_.Properties | Where-Object {$_.Name -eq "KBArticleIDs"}).Value
        更新标题 = ($_.Properties | Where-Object {$_.Name -eq "Title"}).Value
    }
}

另外补充一句:如果你们用WSUS,其实可以检查WSUS服务器上的「计算机更新历史」报表,但前提是服务器一直有正常上报更新状态;如果之前没开启详细日志,还是上面的本地方法更可靠。

备注:内容来源于stack exchange,提问作者Vershner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 11:38:18