为什么 Powershell 中的“get-hotfix”和“wmic qfe list”缺少已安装的更新?

为什么 Powershell 中的“get-hotfix”和“wmic qfe list”缺少已安装的更新?

我正在尝试编写一个脚本来确保安装了某个修补程序。在我们的一台运行 Windows 8.1 的测试计算机上,get-hotfix返回了不完整的修补程序列表:

在此处输入图片描述

然而,程序和功能控制面板中显示了大量补丁:

在此处输入图片描述

我们所有其他测试机器(包括安装了 Windows 8.0 和 8.1 的其他机器)都运行良好。知道这是为什么吗?如何从 Powershell 获取完整的修补程序列表?

编辑: wmic qfe list仅显示相同的四个修补程序get-hotfix

答案1

我相信Get-Hotfix命令行程序利用了Win32_QuickFixEngineeringWMI 类列出 Windows 更新,但仅返回由基于组件的服务 (CBS)Get-Hotfix. /不返回 Microsoft Windows Installer (MSI) 或 Windows 更新站点提供的更新Win32_QuickFixEngineering

您可以尝试通过 PowerShell 使用 Windows 更新 API,如以下示例所示。试一试,如果它显示缺少更新,请告诉我们。

$Session = New-Object -ComObject Microsoft.Update.Session
$Searcher = $Session.CreateUpdateSearcher()
$Searcher.Search("IsInstalled=1").Updates | ft -a Date,Title

编辑:要搜索结果,您可以使用Where-Object 命令行(或别名Where)并过滤特定的修补程序:

$Searcher.Search("IsInstalled=1").Updates | Where {$_.Title -like "*KB2760587*"} | ft date,title

答案2

您需要使用不同的方法来列出通过不同方法安装的更新。例如通过 wsus 或 configmgr 安装的更新

看看这里

https://social.technet.microsoft.com/wiki/contents/articles/4197.how-to-list-all-of-the-windows-and-software-updates-applied-to-a-computer.aspx

答案3

如果有一天有人需要使用 Python 获取完整的更新列表,我已经编写了通过 COM、WMI 和注册表检查 Windows 更新的实现,这样我们就不会错过基于其安装方法的更新。

安装方式:

pip install windows_tools.updates

用法

from windows_tools.updates import get_windows_updates

for update in get_windows_updates(filter_duplicates=True):
    print(update)

您还可以使用以下命令删除重复的过滤器(AV 引擎更新等)get_windows_updates(filter_multiple=False)

相关内容