在 PowerShell 中收集完整的 Windows 更新历史记录

在 PowerShell 中收集完整的 Windows 更新历史记录

我正在尝试获取系统曾经安装的所有更新的列表,根据设置使用 PowerShell 测试应用程序,最终目标是对两者进行 1:1 的比较。
懒惰的技术博客将为您提供以下内容之一,它将轮询 Win32_QuickFixEngineering WMI 位置:

get-hotfix
wmic qfe list full
get-wmiobject win32_quickfixengineering

但这并不能解释所有情况。根据微软的说法:

从 Windows Vista 开始,此类仅返回 Microsoft Windows Installer (MSI)、Windows Update、Microsoft Update 或 Windows Server Update Services 提供的更新。它不包括基于组件的服务 (CBS) 或其他非修补程序或应用提供的更新。

为了补充这一点,您经常会看到代码块与 PowerShell 中的“Windows.Update.Session”COM 对象交互,执行类似的操作以获取(不同的)已安装更新列表:

$Session = New-Object -ComObject Microsoft.Update.Session
$Searcher = $Session.CreateUpdateSearcher()
$historyCount = $Searcher.GetTotalHistoryCount()

但即使不会抓取整个历史列表——我想是因为被提取的列表会删除作为累积更新安装的重复更新,并忽略为早期版本的 Windows 安装的更新
设置但是,应用程序列出了一年前在我的设备上安装的东西:

2020 年安装的更新列表

有没有办法使用 PowerShell 来访问列表?在哪里设置从哪里得到它?

答案1

使用更新程序模块。该Get-WUHistorycmdlet 使用您在问题中尝试过的相同 windows 更新 api (wua),但在后台执行了一些额外的操作以使内容可读:

$history = Get-WUHistory -Last 1000

# Larger than in Settings app, since it includes failed updates
$history.Count
62 

$history | sort date -desc | 
  Format-Table Date,KB,@{l='Category';e={[string]$_.Categories[0].Name}},Title
Date                   KB        Category                           Title               
----                   --        --------                           -----               
7/16/2021 4:19:43 PM   KB5004237 Windows 10, version 1903 and later 2021-07 Cumulativ...
7/16/2021 4:00:44 PM   KB5003537 Windows 10, version 1903 and later 2021-07 Cumulativ...
7/15/2021 5:06:18 PM   KB890830  Windows 10                         Windows Malicious...
7/7/2021 4:22:58 PM    KB5004945 Windows 10, version 1903 and later 2021-07 Cumulativ...

我认为这是最好的选择,尽管我注意到它似乎无法获取新更新类型(如“通过启用包进行功能更新”)的 KB 编号,并且当前此模块的错误需要一个-Last (days)标志,否则它将永远循环。

我无法确认历史限制是什么,但我的确实可以追溯到一年前。

答案2

这是您所寻找的吗?

GitHub Gist - 橄榄球

相关内容