Partilhar via


Atualizando dados WMI em scripts

Em scripts de monitoramento, você pode evitar chamadas sucessivas para GetObject usando um objeto SWbemRefresher. O objeto SWbemRefresher é um contêiner que pode conter vários objetos WMI cujos dados podem ser atualizados em uma chamada.

O uso de um objeto SWbemRefresheré necessário para obter dados precisos de classes de desempenho WMI, como Win32_PerfFormattedData_PerfDisk_LogicalDisk ou outras classes pré-instaladas derivadas de Win32_Perf.

O procedimento a seguir descreve como atualizar dados em scripts.

Para atualizar dados em scripts

  1. Chame CreateObject para criar um SWbemRefresher objeto de atualização.

    Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
    
  2. Conecte-se ao namespace WMI. Para usar as classes de desempenho pré-instaladas Win32_Perf, conecte-se ao root\cimv2.

    Set objServicesCimv2 = GetObject("winmgmts:\\" _
        & strComputer & "\root\cimv2")
    
  3. Adicione um único objeto (chamada SWbemRefresher.Add) ou uma coleção (chamada SWbemRefresher.AddEnum) à atualização.

    Use as classes de dados pré-calculadas derivadas de Win32_PerfFormattedData, por exemplo, Win32_PerfFormattedData_PerfDisk_LogicalDisk em vez de Win32_PerfRawData_PerfDisk_LogicalDisk. Caso contrário, você deve calcular os valores para todas as propriedades que não sejam contadores simples.

    Set objRefreshableItem = _
        objRefresher.AddEnum(objServicesCimv2 , _
        "Win32_PerfFormattedData_PerfProc_Process")
    
  4. Atualize os dados uma vez para obter os dados de desempenho iniciais.

    Chame o método SWbemRefresher.Refresh ou o método SWbemObjectEx.Refresh_ genérico.

    objRefresher.Refresh
    
  5. Se você estiver monitorando o desempenho e tiver uma coleção no objeto de atualização, faça um loop pelos objetos de coleção.

    For Each Process in objRefreshableItem.ObjectSet
        If Process.PercentProcessorTime > 1 then
            WScript.Echo Process.Name & vbnewLine _
                & Process.PercentProcessorTime & "%"
        End If
    Next
    
  6. Limpe os itens da atualização chamando SWbemRefresher.DeleteAll ou remova itens específicos chamando SwbemRefresher.Remove.

O exemplo de código VBScript a seguir mostra como atualizar um único objeto no computador local. O script cria um contentor de atualização e adiciona uma instância de um enumerador para instâncias Win32_PerfFormattedData_PerfProc_Process. A chamada Refresh é feita três vezes para demonstrar as alterações na propriedade PercentProcessorTime para processos que usam mais de um por cento do tempo do processador.

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

A propriedade Index do retornado SWbemRefreshableItem representa o índice do objeto na coleção de atualização. Você pode chamar propriedade SWbemRefreshableItem.IsSet para determinar se um item em uma atualização é ou não um único item ou uma coleção. Para aceder a um único item, use a propriedade SWbemRefreshableItem.Object. Se você não fizer a chamada para SWbemRefreshableItem.Object, o script falhará quando você tentar acessar o objeto. Para aceder a uma coleção, use a propriedade SWbemRefreshableItem.ObjectSet.

Classes de Contador de Desempenho

Acessando dados de desempenho no Script

Tarefas WMI: Monitoramento de desempenho

Monitoramento de dados de desempenho