我编写了一个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
答案 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并且更新直接显示: - /不太明白为什么但我不抱怨。