Set objSession = CreateObject("Microsoft.Update.Session")
Set objSearcher = objSession.CreateUpdateSearcher
Set colHistory = objSearcher.QueryHistory(1, 1)
For Each objEntry in colHistory
Wscript.Echo "Title: " & objEntry.Title
Wscript.Echo "Update application date: " & objEntry.Date
Next
您可能正在疑惑,這一小段指令碼在講什麼呢?嘿嘿,待咱給您解說啦!我們開始先建立 Microsoft.Update.Session 物件的執行個體。建立此物件後,就可以呼叫 CreateUpdateSearcher 方法。我們可以藉此取得 Searcher 物件的執行個體,然後用這個物件來搜尋某台電腦套用的所有更新,這就是我們的目的。
接下來使用 QueryHistory 方法來擷取所需更新:
Set colHistory = objSearcher.QueryHistory(1, 1)
如您所見,在這段指令碼傳遞兩個參數給 QueryHistory:1 與 1。第一個 1 告訴指令碼要在更新歷程記錄中開始搜尋記錄 1,第二個 1 則告訴指令碼在記錄 1 後停止搜尋 (也就是開始搜尋記錄 2 之前)。為什麼要這麼做?這麼說好了,更新會以倒時順序儲存,最新更新為記錄 1,至於最初套用的第一個更新則是集合中的最後一筆記錄。由於只需要最近一次的更新資訊,我們可以限制指令碼只傳回該筆記錄資料,藉此節省一點時間。
注意:順便一題,擷取電腦的完整更新歷程記錄很容易,其實《指令碼物語》(Tales from the Script) 專欄就包含這個工作的指令碼。 |
呼叫 QueryHistory 方法後,我們會得到包含單一項目的集合 (稱為 colHistory),這個項目剛好就是電腦最後一次套用的更新。現在只需要瀏覽此集合 (沒錯,雖然只包含一個項目,還是算集合) 並回應更新標題以及套用更新的日期:
For Each objEntry in colHistory
Wscript.Echo "Title: " & objEntry.Title
Wscript.Echo "Update application date: " & objEntry.Date
Next
也就是說,告訴我們 Windows Update 最後一次對此特定電腦執行作業的時間。
附帶一提,Windows Update 物件模型的內容參雜不齊:有些物件可以在遠端電腦上建立及使用,有些則不行。幸好這段指令碼剛好可以對遠端機器執行。您只需要將遠端電腦名稱當作 CreateObject 的第二個參數加入即可。例如,這行程式碼可讓指令碼對遠端電腦 atl-dc-01 執行:
Set objSession = CreateObject("Microsoft.Update.Session", "atl-dc-01")
從 atl-dc-01 擷取最後一次更新的完整指令碼如下:
Set objSession = CreateObject("Microsoft.Update.Session", "atl-dc-01")
Set objSearcher = objSession.CreateUpdateSearcher
Set colHistory = objSearcher.QueryHistory(1, 1)
For Each objEntry in colHistory
Wscript.Echo "Title: " & objEntry.Title
Wscript.Echo "Update application date: " & objEntry.Date
Next
還覺得補充程式管理很複雜嗎?小事一樁啦! |