用 SWbemObject 编写脚本

SWbemObject脚本对象是泛型 WMI 对象,定义可以使用的属性和方法,而不管 SWbemObject 对象绑定到的特定 WMI 对象。 所有 WMI 对象(如 Win32 _ 进程 的实例或任何其他 wmi 数据类)都由 SWbemObject 表示,并且除了其自己的特定属性和方法外,还可以使用 SWbemObject 通用属性和方法。

例如,通过调用 _ SWbemObject方法,使用以下脚本获取 Win32 _ 进程的所有实例。 ClsobjProcess 表示 Win32 _ 进程 类定义和 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 _ 服务 实例,并将其存储在 objAlerter 中。 然后,可以调用 SWbemObject 方法,例如 wscript.echo objAlerter _ ,或由数据类定义的方法,如 wscript.echo objAlerter。 objAlerter,它表示 Win32 _ 服务和 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 _的调用会获得另一个泛型 WMI 脚本对象 SWbemObjectSet。 如图所示, SWbemObjectSet 对象可被视为 集合

Set clsobjProcess = objWMIServices.Get("Win32_Process")

可以标识 SWbemObject方法,因为它们都以下划线 (_) (例如 _ SWbemObject)结束。

SWbemObjectEx 扩展 SWbemObject的属性。 例如,你现在可以通过调用 _ SWbemObjectEx来更新任何 WMI 对象的数据,例如 Win32 _ 进程的实例。

下面的示例演示如何每隔五秒刷新一次系统处理页错误数据。

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 _PutAsync _允许将更改写回任何 WMI 对象。 这些方法只会将更改提交到创建对象的命名空间中的对象。 可以使用 SWbemServicesExSWbemServicesEx将对象写入其他命名空间。

WMI 脚本编写 API

创建 WMI 脚本

更新整个实例

调用方法