Actualización de datos de WMI en scripts

En los scripts de supervisión, puede evitar llamadas sucesivas a GetObject mediante un objeto SWbemRefresher. El objeto SWbemRefresher es un contenedor que puede contener varios objetos WMI cuyos datos se pueden actualizar en una llamada.

El uso de un objeto SWbemRefresher es necesario para obtener datos precisos de las clases de rendimiento de WMI, como Win32_PerfFormattedData_PerfDisk_LogicalDisk u otras clases preinstaladas derivadas de Win32_Perf.

En el procedimiento siguiente se describe cómo actualizar los datos en scripts.

Para actualizar datos en scripts

  1. Llame a CreateObject para crear un objeto de actualizador SWbemRefresher.

    Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
    
  2. Conéctese al espacio de nombres WMI. Para usar clases de rendimiento Win32_Perf preinstaladas, conéctese a root\cimv2.

    Set objServicesCimv2 = GetObject("winmgmts:\\" _
        & strComputer & "\root\cimv2")
    
  3. Agregue un único objeto (llame a SWbemRefresher.Add) o una colección (llame a SWbemRefresher.AddEnum) al actualizador.

    Use las clases de datos precalculadas derivadas de Win32_PerfFormattedData, por ejemplo, Win32_PerfFormattedData_PerfDisk_LogicalDisk en lugar de Win32_PerfRawData_PerfDisk_LogicalDisk. De lo contrario, debe calcular los valores de todas las propiedades que no sean contadores simples.

    Set objRefreshableItem = _
        objRefresher.AddEnum(objServicesCimv2 , _
        "Win32_PerfFormattedData_PerfProc_Process")
    
  4. Actualice los datos una vez para obtener los datos de rendimiento iniciales.

    Llame al método SWbemRefresher.Refresh o al método SWbemObjectEx.Refresh_ genérico.

    objRefresher.Refresh
    
  5. Si está supervisando el rendimiento y tiene una colección en el objeto actualizador, recorra en bucle los objetos de colección.

    For Each Process in objRefreshableItem.ObjectSet
        If Process.PercentProcessorTime > 1 then
            WScript.Echo Process.Name & vbnewLine _
                & Process.PercentProcessorTime & "%"
        End If
    Next
    
  6. Borre los elementos del actualizador llamando a SWbemRefresher.DeleteAll o quite elementos específicos llamando a SwbemRefresher.Remove.

En el siguiente ejemplo de código de VBScript se muestra cómo actualizar un solo objeto en el equipo local. El script crea un contenedor de actualizador y agrega una instancia de un enumerador para instancias de Win32_PerfFormattedData_PerfProc_Process. La llamada Refresh se realiza tres veces para demostrar los cambios en la propiedad PercentProcessorTime para procesos que utilizan más del uno por ciento del tiempo del procesador.

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

La propiedad Index del SWbemRefreshableItem devuelto representa el índice del objeto en la colección de del actualizador. Puede llamar a la propiedad SWbemRefreshableItem.IsSet para determinar si un elemento de un actualizador es un solo elemento o una colección. Para obtener acceso a un solo elemento, utilice la propiedad SWbemRefreshableItem.Object. Si no realiza la llamada a SWbemRefreshableItem.Object, se produce un error en el script al intentar acceder al objeto . Para obtener acceso a una colección, use la propiedad SWbemRefreshableItem.ObjectSet.

Clases de contador de rendimiento

Acceso a datos de rendimiento en scripts

Tareas de WMI: supervisión del rendimiento

Supervisión de datos de rendimiento