Поделиться через


Скриптирование с помощью 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, представляющий службу оповещений, и сохранить его в 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

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

вызов метода