我正在尝试获取系统曾经安装的所有更新的列表,根据设置使用 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 安装的更新
。设置但是,应用程序列出了一年前在我的设备上安装的东西:
有没有办法使用 PowerShell 来访问这列表?在哪里设置从哪里得到它?
答案1
使用更新程序模块。该Get-WUHistory
cmdlet 使用您在问题中尝试过的相同 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
这是您所寻找的吗?