【发布时间】: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