Создание скриптов с помощью SWbemObject

Объект скрипта SWbemObject — это универсальный объект WMI, определяющий свойства и методы, которые можно использовать независимо от конкретного объекта WMI, к которому привязан объект SWbemObject . Все объекты WMI, такие как экземпляр Win32_Process или любой другой класс данных WMI, представлены SWbemObject и могут использовать общие свойства и методы SWbemObject в дополнение к собственным конкретным свойствам и методам.

Например, используйте следующий скрипт, чтобы получить все экземпляры Win32_Process путем вызова метода SWbemObject.Instances_ . 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. Например, теперь можно обновить данные любого объекта WMI, например экземпляра Win32_Process, путем вызова SWbemObjectEx.Refresh_.

В следующем примере показано, как данные об ошибке страницы системного процесса можно обновлять каждые пять секунд.

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.

API скриптов для WMI

Создание скрипта WMI

Обновление всего экземпляра

Вызов метода