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


Обновление данных WMI в скриптах

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

Использование объекта SWbemRefresher требуется для получения точных данных из WMI-классов производительности, таких как Win32_PerfFormattedData_PerfDisk_LogicalDisk или другие предустановленные классы, производные от Win32_Perf.

В следующей процедуре описывается обновление данных в скриптах.

Обновление данных в скриптах

  1. Вызовите CreateObject для создания объекта обновления SWbemRefresher.

    Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
    
  2. Подключитесь к пространству имен WMI. Чтобы использовать предварительно установленные классы производительности Win32_Perf, подключитесь к root\cimv2.

    Set objServicesCimv2 = GetObject("winmgmts:\\" _
        & strComputer & "\root\cimv2")
    
  3. Добавьте один объект (вызов SWbemRefresher.Add) или коллекцию (вызов SWbemRefresher.AddEnum) в средство обновления.

    Используйте предварительно вычисляемые классы данных, производные от Win32_PerfFormattedData, например, Win32_PerfFormattedData_PerfDisk_LogicalDisk вместо Win32_PerfRawData_PerfDisk_LogicalDisk. В противном случае необходимо вычислить значения для всех свойств, отличных от простых счетчиков.

    Set objRefreshableItem = _
        objRefresher.AddEnum(objServicesCimv2 , _
        "Win32_PerfFormattedData_PerfProc_Process")
    
  4. Обновите данные один раз, чтобы получить начальные данные о производительности.

    Вызовите метод SWbemRefresher.Refresh или универсальный метод SWbemObjectEx.Refresh_.

    objRefresher.Refresh
    
  5. Если вы отслеживаете производительность и имеете коллекцию в объекте-обновителе, выполните проход по объектам этой коллекции.

    For Each Process in objRefreshableItem.ObjectSet
        If Process.PercentProcessorTime > 1 then
            WScript.Echo Process.Name & vbnewLine _
                & Process.PercentProcessorTime & "%"
        End If
    Next
    
  6. Удалите элементы из средства обновления, вызвав SWbemRefresher.DeleteAll или удалите определенные элементы, вызвав SWbemRefresher.Remove.

В следующем примере кода VBScript показано, как обновить один объект на локальном компьютере. Скрипт создает контейнер обновления и добавляет экземпляр перечислителя для экземпляров Win32_PerfFormattedData_PerfProc_Process. Вызов обновления выполняется трижды, чтобы продемонстрировать изменения в свойстве PercentProcessorTime для процессов, использующих более чем один процент времени процессора.

On Error Resume Next
strComputer = "."
Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
Set objServicesCimv2 = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
If Err = 0 Then 
Set objRefreshableItem = _
    objRefresher.AddEnum(objServicesCimv2 ,"Win32_PerfFormattedData_PerfProc_Process")
objRefresher.Refresh
' Loop through the processes three times to locate  
'    and display all the process currently using 
'    more than 1 % of the process time. Refresh on each pass.
For i = 1 to 3
    Wscript.Echo "Refresh number " & i 
    objRefresher.Refresh 
    For Each Process in objRefreshableItem.ObjectSet
        If Process.PercentProcessorTime > 1 then
            WScript.Echo Process.Name & vbnewLine & Process.PercentProcessorTime & "%"
        End If
    Next
Next
Else
    WScript.Echo Err.Description
End If

Свойство Index возвращаемого SWbemRefreshableItem означает индекс объекта в коллекции обновления. Можно вызвать свойство SWbemRefreshableItem.IsSet, чтобы определить, является ли элемент в обновителе одним элементом или коллекцией. Чтобы получить доступ к одному элементу, используйте свойство SWbemRefreshableItem.Object. Если вызов SWbemRefreshableItem.Objectне выполняется, скрипт завершается ошибкой при попытке доступа к объекту. Чтобы получить доступ к коллекции, используйте свойство SWbemRefreshableItem.ObjectSet.

Классы производительных счетчиков

Доступ к данным о производительности в скрипте

задачи WMI : мониторинг производительности

мониторинг данных о производительности