Скриптирование с помощью 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.
Связанные разделы