Windows Update代理API - 搜索更新

时间:2015-01-22 07:03:54

标签: windows powershell

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

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

但事实并非如此。至少不是通过API。使用GUI(Windows Update)进行手动搜索。

手动搜索后,API会发现更新!

我的脚本中缺少什么?我在Microsofts文档中找不到任何内容: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

1 个答案:

答案 0 :(得分:3)

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

IsInstalled = 0且DeploymentAction ='Installation'或IsPresent = 1且DeploymentAction ='Uninstallation'或IsInstalled = 1且DeploymentAction ='Installation'且RebootRequired = 1或IsInstalled = 0且DeploymentAction ='Uninstallation'且RebootRequired = 1

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