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