我正在使用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