使用 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
以下示例获取 Win32_Service 的特定实例(表示 Alerter 服务)并将此实例存储在 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 将对象写入其他命名空间。
相关主题