gpt4 book ai didi

windows - 缓慢的 WUA(Windows 更新 API)

转载 作者:可可西里 更新时间:2023-11-01 12:44:05 45 4
gpt4 key购买 nike

我正在使用 PowerShell 脚本来执行一些 Windows 更新任务。大多数任务都围绕着使用下面的代码片段获取尚未应用的 Windows 更新集合。返回该集合后,我将遍历它并执行隐藏、下载或安装更新等任务。

我注意到这段代码可能需要 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 系统上发生的。

最佳答案

看起来缓存是一个名为 wsusscn2.cab 的 CAB 文件,它会定期从 MSFT 下载。我在下面发布的 msdn 链接中有指向它的直接链接。也许编写一个每天/每周下载一次的脚本(如果这将是一个广泛部署的脚本,则可能下载到网络共享),然后更改您的脚本以强制它始终查看 CAB 文件而不是在线。 像这样:

$Session = New-Object -ComObject Microsoft.Update.Session       
$UServiceManager = New-Object -ComObject Microsoft.Update.ServiceManager
$UService = $UServiceManager.AddScanPackageService("Offline Sync Service", "c:\wsusscn2.cab")
$Searcher = $Session.CreateUpdateSearcher()
$Searcher.ServerSelection = 3
$Searcher.ServiceID = $UService.ServiceID
$Criteria = "IsInstalled=0 and Type='Software'"
$SearchResult = $Searcher.Search($Criteria)
$SearchResult.Updates

msdn

关于windows - 缓慢的 WUA(Windows 更新 API),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27337433/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com