strComputer = "."
Set objWMIService = GetObject("winmgmts:"_
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
Wscript.Echo objOperatingSystem.ServicePackMajorVersion _
& "." & objOperatingSystem.ServicePackMinorVersion
Next
現在您一定在想:「這裡說的是『最新』的 Service Pack。但是我想知道的是電腦上安裝的『所有』Service Pack 啊!」如果是這樣的話,請放心;舉例來說,當您安裝 Service Pack 3.0 時,就會自動取得 Service Pack 1.0 及 2.0 所包括的所有項目。因此,是否安裝 Service Pack 1.0 並不重要;安裝 Service Pack 3.0 就可以取得 Service Pack 1.0 的所有功能。也就是說,您真正需要注意的是電腦最後安裝的 Service Pack。上述指令碼就可以完成此動作。
但是,剛才提到的那些問題修正呢?要如何稽核電腦以得知安裝了哪些問題修正呢?請試試這個指令碼:
strComputer = "."
Set objWMIService = GetObject("winmgmts:"_
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colQuickFixes = objWMIService.ExecQuery _
("Select * from Win32_QuickFixEngineering")
For Each objQuickFix in colQuickFixes
Wscript.Echo "Computer:" & objQuickFix.CSName
Wscript.Echo "Description:" & objQuickFix.Description
Wscript.Echo "Hot Fix ID:" & objQuickFix.HotFixID
Wscript.Echo "Installation Date:" & objQuickFix.InstallDate
Wscript.Echo "Installed By:" & objQuickFix.InstalledBy
Next
請記住兩件事:首先,問題修正並不是都以標準方式來發行。這並不表示它們無法運作;只是表示部份問題修正可能不會匯入上述所有欄位;例如,許多問題修正都不會傳回 InstallDate 屬性的值。其次,問題修正的資訊是記錄於電腦的不同位置,而且因為這個動作並沒有一種標準方法來進行,所以 WMI 會檢查所有這些位置並擷取問題修正的資訊。這樣很好,只是問題修正有時會將資訊實際記錄於多個位置。這算不上什麼大問題;只是表示當您從 WMI 取回資訊時,可能會看到問題修正 QFE 1111111 出現了兩三次。這是因為 QFE 1111111 將它自己的資訊記錄在數個不同的位置。
沒錯:我們還是提到了 Windows Update,不是嗎?如果您安裝了最新版本的 Windows Update,就會有個新的 COM 物件可讓您擷取更新資訊。例如:
Set objSession = CreateObject("Microsoft.Update.Session")
Set objSearcher = objSession.CreateUpdateSearcher
intHistoryCount = objSearcher.GetTotalHistoryCount
'Wscript.Echo intHistoryCount
Set colHistory = objSearcher.QueryHistory(1, intHistoryCount)
For Each objEntry in colHistory
Wscript.Echo "Operation:" & objEntry.Operation
Wscript.Echo "Result code:" & objEntry.ResultCode
Wscript.Echo "Date:" & objEntry.Date
Wscript.Echo "Title:" & objEntry.Title
Wscript.Echo "Description:" & objEntry.Description
Wscript.Echo "Client application ID:" & objEntry.ClientApplicationID
Wscript.Echo "Server selection:" & objEntry.ServerSelection
Wscript.Echo "Service ID:" & objEntry.ServiceID
i = 1
For Each strStep in objEntry.UninstallationSteps
Wscript.Echo i & " -- " & strStep
i = i + 1
Next
Wscript.Echo "Uninstallation notes:" & objEntry.UninstallationNotes
Wscript.Echo "Support URL:" & objEntry.SupportURL
Wscript.Echo
Next
事實上;我們只能確定 Windows XP 會安裝 Microsoft.Update.Session 物件 (當您安裝 XP Service Pack 2 時,就會自動安裝)。如果您執行的是 Windows 2000,則可能需要造訪 Windows Update,安裝最新的版本,然後執行上述指令碼,看看它是否能夠運作。 |