使用 SWbemObject 編寫腳本
SWbemObject腳本物件是一般 WMI 物件,定義可以使用的屬性和方法,不論SWbemObject物件系結至哪個特定 WMI 物件。 SWbemObject 代表所有WMI物件,例如Win32_Process或任何其他 WMI 資料類別的實例,而且除了自己的特定屬性和方法之外,還可以使用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將物件寫入不同的命名空間。
相關主題