如何检测 windows 更新状态

How to detect windows update status

我想以编程方式检测当前 windows 10 更新状态。

我试了wuapi效果不错,但是wuapi有一些问题

首先,获取更新信息需要很长时间。

其次,不能离线使用。

是否有任何其他方法可以检测当前 windows 10 更新状态? 是否有任何注册表或系统文件可以检测到它?

我尝试使用 procmon 进行分析,但是与 windows udpate 链接的文件和注册表太多。

谢谢...

"COM API

COM API 是一种无需解析日志即可直接访问 Windows 更新的好方法。此 API 的应用范围从查找计算机上的可用更新到安装和卸载更新。

您可以使用 Microsoft.Update.Session class 到 运行 更新搜索,然后计算可用更新的数量以查看是否有任何适用于计算机的更新。

PowerShell 示例:

$updateObject = New-Object -ComObject Microsoft.Update.Session
$updateObject.ClientApplicationID = "Serverfault Example Script"
$updateSearcher = $updateObject.CreateUpdateSearcher()
$searchResults = $updateSearcher.Search("IsInstalled=0")
Write-Host $searchResults.Updates.Count

如果返回的结果大于 0,则表示计算机有更新需要安装 and/or 下载。您可以轻松更新 powershell 脚本以适应您的应用程序。

请注意,搜索功能似乎不是异步的,因此它会在搜索时冻结您的应用程序。在这种情况下,您需要使其异步。"


注册方法


来源:

https://serverfault.com/questions/891188/is-it-possible-to-detect-the-windows-update-status-via-registry-to-see-if-the-s

没有记录的方法来访问自动更新正在使用的搜索结果(设置中 Windows 更新页面显示的结果)。

不过,有两件事可能对您有用:

  • 您可以使用IAutomaticUpdatesResults::LastInstallationSuccessDate立即查看计算机上次成功安装更新的时间。如果您只想知道 "Is this PC processing updates successfully?",那么这可能就是您所需要的。
  • 您可以使用 Windows 更新 API 搜索来查看需要哪些更新。在调用 Search 之前,将 script you can use as a starting point. If you use this script as written, it will go online to find newly-released updates, which isn't what you want in your scenario. But you can set your IUpdateSearcher object's Online 属性 设置为 false。这样做将执行离线扫描,其中 WU 只是重新评估它已经知道的更新。这将离线工作,而且 return 更快的结果。