2014-12-06 101 views
9

我正在使用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系統上發生的事情。

+0

你檢查上該Windowsupdate.log,看看發生了什麼?執行此操作之前,$ Searcher.GetTotalHistoryCount()會顯示什麼? – xXhRQ8sD2L7Z 2014-12-07 23:11:00

+0

ST8Z6FR57ABE6A8RE9UF - 在WindowsUpdate.log中沒有任何異常。我看到$ Searcher.GetTotalHistoryCount()啓動並立即完成(返回「46」); $ Searcher.Search($ Criteria)需要6秒鐘才能完成。沒有錯誤。 – quux 2014-12-08 18:05:37

+0

這很有趣,我知道你可以從註冊表中獲得數字,但所有信息都不在那裏。也許它從SoftwareDistribution文件夾讀取清單文件? – xXhRQ8sD2L7Z 2014-12-10 06:36:26

回答

3

看起來像緩存是一個名爲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

+0

這似乎不太可能。 1)搜索我的電腦時發現沒有wsusscan2.cab的拷貝2)在我能找到的所有文件中,它說這個文件必須在使用前下載。因此,雖然這是處理事情的一種方式,但它似乎不是系統使用的緩存。 – quux 2014-12-15 23:56:40

+0

此外:使用一個Invoke-Webrequest,(當前103 MB)文件下載需要比我原來的方法更長的時間! – quux 2014-12-16 00:07:42

+0

「Wsusscn2.cab」脫機緩存的用法是官方的並且有記錄 - https://msdn.microsoft.com/en-us/library/ff647642.aspx - mbsa fyi生成,ime,與PowerShell方法類似的結果 – Patrick 2016-02-26 01:22:01