使用 SWbemObject 編寫腳本
SWbemObject 腳本對像是泛型 WMI 物件,定義屬性和方法,不論 SWbemObject 對象系結到哪個特定 WMI 物件都可以使用。 所有 WMI 物件,例如 Win32_Process 的實例或任何其他 WMI 數據類別,都會以 SWbemObject 來表示,而且除了自己的特定屬性和方法之外,也可以使用 SWbemObject 通用屬性和方法。
例如,使用下列腳本,藉由呼叫 SWbemObject.Instances_ 方法來取得 Win32_Process 的所有實例。 clsobjProcess 代表 Win32_Process 類別定義和 SWbemObject。
strComputer = "."
Set objWMIServices = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set clsobjProcess = objWMIServices.Get("Win32_Process")
Set colProcesses = clsobjProcess.Instances_()
For Each Process in colProcesses
WScript.Echo Process.Name
Next
下列範例會取得代表 Alerter 服務的特定 Win32_Service 實例,並將它儲存在 objAlerter 中。 然後,您可以呼叫 SWbemObject 方法,例如 WScript.Echo objAlerter.Path_,或數據類別所定義的方法,例如 WScript.Echo objAlerter.State。 objAlerter 代表一個 Win32_Service 實例和 SWbemObject。
strComputer = "."
Set objWMIServices = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set objAlerter = objWMIServices.Get("Win32_Service.Name='Alerter'")
WScript.Echo objAlerter.Path_
objAlerter.StopService()
WScript.Echo objAlerter.State
For each Prop in myObject.Properties_
Wscript.Echo Prop.Name
Next
呼叫 SWbemObject.Instances_ 會取得另一個泛型 WMI 腳本物件,SWbemObjectSet。 如所示,SWbemObjectSet 物件可以視為 集合。
Set clsobjProcess = objWMIServices.Get("Win32_Process")
您可以識別 SWbemObject 方法,因為它們都以底線結尾,例如 SWbemObject.Instances_。
SWbemObjectEx 會擴充 SWbemObject屬性。 例如,您現在可以藉由呼叫 SWbemObjectEx.Refresh_來更新任何 WMI 對象的數據,例如 Win32_Process的實例。
下列範例顯示系統進程頁面錯誤數據如何每隔五秒重新整理一次。
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colProcesses = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = 'System'",,48)
For Each Process in colProcesses
i = 0
Do Until i = 5
i = i + 1
Wscript.Echo "PageFaults = " & Process.PageFaults
Wscript.Sleep 10000
Process.Refresh_
Loop
Next
如需使用 SWbemRefresher 物件重新整理數據的詳細資訊,請參閱 在腳本中重新整理 WMI 數據。
SWbemObject.Put_ 和 PutAsync_ 可讓您將變更寫回任何 WMI 物件。 這些方法只會提交物件在其建立時的命名空間中的變更。 您可以使用 SWbemServicesEx.Put 或 SWbemServicesEx.PutAsync,將 物件寫入不同的命名空間。
相關主題