我正在使用PowerShell脚本来执行一些Windows Update任务。大多数任务都是使用下面的代码片段获取尚未应用的Windows更新集合。一旦这个集合返回,我遍历它并执行隐藏,下载或安装更新等任务。慢WUA(Windows Update API)
我注意到这段代码可能需要6到115秒的时间才能运行。通常情况下,较长的运行是在机器重新启动或闲置超过15分钟后。
但是,如果我打开Windows Update控制面板项目,它立即知道有多少更新是未完成的,并且可以给我这些未完成更新的列表(集合)。如果我点击WU的“检查更新”链接,则需要10秒钟才能再次检查,有时检查结果与打开时“知道”的结果有所不同。
所以我假设WUA在某处维护一个缓存的更新集合,可能每天自动更新一次。 我的问题:我的代码如何访问该缓存,而不是运行下面显示的更长的“检查更新”代码?具体而言,我希望能够快速获得IUpdateCollection的使用权。
$Session = New-Object -ComObject Microsoft.Update.Session
$Searcher = $Session.CreateUpdateSearcher()
$Searcher.Online = $false #tested $true and $false; $true slightly slower
$Criteria = "IsInstalled=0 and Type='Software'"
$SearchResult = $Searcher.Search($Criteria)
$SearchResult.Updates
注意,这一切都是当前,Windows2012R2系统上发生的事情。
你检查上该Windowsupdate.log,看看发生了什么?执行此操作之前,$ Searcher.GetTotalHistoryCount()会显示什么? – xXhRQ8sD2L7Z 2014-12-07 23:11:00
ST8Z6FR57ABE6A8RE9UF - 在WindowsUpdate.log中没有任何异常。我看到$ Searcher.GetTotalHistoryCount()启动并立即完成(返回“46”); $ Searcher.Search($ Criteria)需要6秒钟才能完成。没有错误。 – quux 2014-12-08 18:05:37
这很有趣,我知道你可以从注册表中获得数字,但所有信息都不在那里。也许它从SoftwareDistribution文件夹读取清单文件? – xXhRQ8sD2L7Z 2014-12-10 06:36:26