我编写了使用Windows Update代理API(IUpdateSearcher,IUpdateDownloader,IUpdateInstaller等)的Powershell脚本。一切正常,该脚本找到可用的更新,下载并安装它们。
但是,搜索连续更新时存在问题。例如,.NET Framework 4.5.2有一个更新。通过脚本安装此更新,然后重新启动PC。现在应该有可用的.Net Framework 4.5.2语言包更新。
但事实并非如此。至少不是通过API。使用GUI(Windows Update)进行手动搜索即可。
手动搜索后,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
最佳答案
奇怪的是,我刚才遇到了相同的问题,Windows GUI显示了一个特定的更新,我们使用API的GUI不会显示该特定的更新...我的IsInstalled = 0和IsHidden = 0...。更新日志,并找到了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,并且更新直接显示出来:-/不十分清楚为什么,但我没有提示。
关于windows - Windows Update代理API-搜索更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28082996/