以编程方式获取 Windows 中所有已安装更新的列表

Programmatically get a list of all installed updates in Windows

我想以编程方式获取所有已安装 KB 的列表。这可能是 python 代码、WinAPI(我将从 python 调用)、运行 连接另一个进程并解析其输出等。我感兴趣的是安全更新,但我不感兴趣关心其他更新是否被 return 编辑。但是,我也想要软件更新,而不仅仅是 Windows - 控制面板 "Installed Updates" window 中显示的所有内容。 同样重要的是,此代码将 运行 适用于 windows 的所有版本,而不仅仅是单个版本(我不介意在代码中使用 if-else,不同的 [=33] 具有不同的行为=] 版本 - 重要的是它最终会起作用。

我尝试了 wmic qfesysteminfo 和 PowerShell 的 get-hotfix,所有这些 return 仅 OS 更新。

我自己有一个 Windows 10,但我在注册表或文件系统中找不到将所有 KB 列在一起的地方。也无法理解 Procmon 的输出(在记录打开 "Installed Updates" 之后)——太大而且不够集中。似乎在不同的地方列出了不同的更新,但我无法轻易理解如何 extend/generalize.

编辑: 我找到了这段代码:https://codereview.stackexchange.com/questions/135648/find-installed-and-available-windows-updates

我在我的计算机上尝试了 运行,它发现一些 KB 既没有出现在我 运行 的命令行命令中,也没有出现在 "Installed Updates" 中。另一方面,也有一些知识库没有出现在那里,但确实出现在其他位置..

谢谢!

qfe 的问题是较新的 Windows 版本更新了与 CBS 无关的组件,因此 wmic path Win32_QuickFixEngineering 不会显示它们。

诀窍是对更新程序系统使用 COMObject。 我写了一个小包来完成这项工作,并通过 COM、WMI 和注册表检查更新。

通过 COM 与 windows 更新对话提供了最多的信息。 WMI给出了一些信息,registry当然只给出了KB和安装日期。

安装

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 定义更新显示很多。