【问题标题】:Windows Update Agent API - Searching for UpdatesWindows 更新代理 API - 搜索更新
【发布时间】:2015-03-20 21:41:27
【问题描述】:

我编写了一个使用 Windows Update 代理 API(IUpdateSearcher、IUpdateDownloader、IUpdateInstaller 等)的 Powershell 脚本。一切正常,脚本找到可用的更新,下载并安装它们。

但是,搜索连续更新时出现问题。例如,.Net Framework 4.5.2 有一个更新。通过脚本安装更新,然后重新启动 PC。现在应该有可用的 .Net Framework 4.5.2 语言包更新。

但事实并非如此。至少不是通过 API。可以使用 GUI(Windows 更新)手动搜索。

经过手动搜索,API 发现更新很好!

我的脚本中缺少什么?我在 Microsoft 的文档中找不到任何内容:https://msdn.microsoft.com/en-us/library/windows/desktop/aa386868(v=vs.85).aspx

$updateSession = New-Object -ComObject 'Microsoft.Update.Session'
$UpdateSession.WebProxy.AutoDetect = $false

$updateSearcher = $updateSession.CreateUpdateSearcher()

$searchResult = $updateSearcher.Search('IsInstalled=0 and IsHidden=0')

$objCollectionDownload = New-Object -ComObject 'Microsoft.Update.UpdateColl'

foreach ($update in $searchResult.Updates)
{
    $objCollectionTmp = New-Object -ComObject 'Microsoft.Update.UpdateColl'
    $objCollectionTmp.Add($update) | Out-Null

    $downloader = $updateSession.CreateUpdateDownloader()
    $downloader.Updates = $objCollectionTmp

    try
    {
        $downloadResult = $downloader.Download()
    }
    catch
    {
        //exception Handling
    }

    $objCollectionDownload.Add($update) | Out-Null
}

$updatesToInstall = New-Object -ComObject 'Microsoft.Update.UpdateColl'
$updateInstaller = $updateSession.CreateUpdateInstaller()

foreach ($update in $objCollectionDownload)
{
    //accept Eula etc...

    $updatesToInstall.Add($update) | Out-Null
}

$updateInstaller.Updates = $updatesToInstall

$installationRestult = $updateInstaller.Install()

//check installation result

【问题讨论】:

  • 它一直对我有用,尽管我还没有测试过这种特定的更新组合。除了我使用 vbscript 而不是 Powershell 之外,唯一的区别是我说 .Search("IsInstalled=0") 没有额外的子句,也许试试?
  • 除了这个错误,脚本对我也很好。我在安装 IE10 时遇到了同样的问题,使用搜索方法找不到 IE10 的连续安全更新。我会试试.Search("IsInstalled=0")
  • 嗯。碰巧我们跳过了 IE10,直接从 IE9 转到了 IE11。而且我们还没有部署 4.5.2,我不确定 WSUS 服务器是否配置为包含语言包。所以我猜我只是没有遇到触发错误的特定情况。您可能想尝试停止并重新启动 Windows 更新服务 (wuauserv)。

标签: windows powershell


【解决方案1】:

奇怪的是我刚才遇到了同样的问题,Windows GUI 显示了一个特定的更新,我们使用 API 的 GUI 不会显示这个特定的更新...我有 IsInstalled = 0 和 IsHidden = 0...。我看了在 WIndows 更新日志中找到了 WIndows GUI 使用的条件。

IsInstalled=0 and DeploymentAction='Installation' or IsPresent=1 and DeploymentAction='Uninstallation' or IsInstalled=1 and DeploymentAction='Installation' and RebootRequired=1 or IsInstalled=0 and DeploymentAction='Uninstallation' and RebootRequired=1

将其添加到我的应用程序中代替 IsInstalled = 0 和 IsHidden = 0 并且更新直接显示:-/ 不太明白为什么,但我没有抱怨。

【讨论】:

    猜你喜欢
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2021-02-03
    • 1970-01-01
    相关资源
    最近更新 更多