Tarefas do WMI: monitoramento de desempenho

Use as classes do WMI que obtêm dados de contadores de desempenho para acessar e atualizar dados sobre o desempenho do computador. Para obter outros exemplos, consulte o TechNet ScriptCenter em https://www.microsoft.com/technet. Para obter mais informações, consulte Bibliotecas de desempenho e a WMI e Monitorar dados de desempenho.

Os exemplos de script mostrados neste tópico obtêm dados somente do computador local. Para obter mais informações sobre como usar o script para obter dados de computadores remotos, confira Como conectar-se ao WMI em um computador remoto.

O procedimento a seguir descreve como executar um script.

Para executar um script

  1. Copie o código e salve-o em um arquivo com a extensão .vbs, por exemplo, nomedoarquivo.vbs. Verifique se o editor de texto não adicionou a extensão .txt ao arquivo.
  2. Abra uma janela do prompt de comando e navegue até o diretório no qual deseja salvar o arquivo.
  3. Digite cscript nomedoarquivo.vbs no prompt de comando.
  4. Se você não conseguir acessar um log de eventos, verifique se está executando a partir de um prompt de comandos com privilégios elevados. Alguns logs de eventos, como o Log de Eventos de Segurança, podem ser protegidos por UAC (Controles de Conta de Usuário).

Observação

Por padrão, o cscript exibe a saída de um script na janela do prompt de comando. Como os scripts do WMI podem gerar uma grande quantidade de saída, pode ser interessante redirecionar essa saída para um arquivo. Digite cscript nomedoarquivo.vbs > arquivodesaida.txt no prompt de comando para redirecionar a saída do script nomedoarquivo.vbs para arquivodesaida.txt.

A tabela a seguir lista exemplos de script que podem ser usados para obter diversos tipos de dados do computador local.

Como fazer... Classes ou métodos WMI
... para obter os dados do contador de desempenho que posso ver no utilitário Perfmon em um script? Use classes com nomes que começam com "Win32_PerfFormattedData", por exemplo, Win32_PerfFormattedData_PerfProc_Process. Propriedades com nomes como PageFileBytes correspondem aos contadores de desempenho que você vê em Perfmon. As classes "Win32_PerfFormattedData" calculam os valores finais dos contadores para você.
... para obter dados de desempenho em andamento para um processo, uma unidade de disco e outros dados? Use o Win32_PerfFormattedData_PerfProc_Process ou a Classe de contador de desempenho formatada apropriada e o método SWbemObjectEx.Refresh_. Para obter mais informações, consulte Scripts com SWbemObject.
Em C++, use IWbemConfigureRefresher::AddObjectByPath e IWbemRefresher::Refresh. Para obter mais informações, consulte Monitoramento de dados de desempenho.
O script a seguir é executado até que o computador seja reiniciado, o WMI seja interrompido ou o script seja interrompido. Para interromper o script manualmente, use o Gerenciador de Tarefas para interromper o processo. Para interrompê-lo programaticamente, use o método Terminate na classe Win32_Process.

VB
              
              strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" _ & strComputer & "\root\cimv2") set PerfProcess = objWMIService.Get(_ "Win32_PerfFormattedData_PerfProc_Process.Name='Idle'") 

While (True) PerfProcess.Refresh_
Wscript.Echo PerfProcess.PercentProcessorTime Wscript.Sleep 1000 Wend

... para obter dados de desempenho em andamento para todos os processos sem sondagem repetida?

Use classes que têm nomes que começam com "Win32_PerfFormattedData" e um objeto SWbemRefresher. O atualizador contém os objetos, de modo que você não precisa obter a coleção repetidamente. No mínimo dois valores são necessários para calcular dados de desempenho, porque a maioria dos contadores são contadores de taxa. Na primeira vez que você exibir os dados do atualizador, eles ficarão vazios.

O script a seguir é executado indefinidamente até que o computador seja reinicializado, o WMI seja interrompido ou o script seja interrompido. Para interromper o script manualmente, use o Gerenciador de Tarefas para interromper o processo. Para interrompê-lo programaticamente, use o método Terminate na classe Win32_Process.

VB
              
              strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" _ & strComputer & "\root\cimv2") set objRefresher = CreateObject("WbemScripting.Swbemrefresher") Set objProcessor = objRefresher.AddEnum _ (objWMIService, _ "Win32_PerfFormattedData_PerfOS_Processor").ObjectSet 

While (True) objRefresher.Refresh For each RefreshItem in objRefresher For each objProcess in RefreshItem.ObjectSet Wscript.Echo objProcess.GetObjectText_ Next Next Wscript.Sleep 5000 Wend

... para obter e calcular dados de desempenho para processos no Windows 2000?

Use as classes "Win32_PerfRawData", como Win32_PerfRawData_PerfProc_Process. Obtenha os dados da propriedade, como PercentProcessorTime, duas vezes para um processo específico. Procure a fórmula especificada no qualificador CounterType para a propriedade e calcule. O CounterType no exemplo é PERF_100NSEC_TIMER_INV. Para obter mais informações, consulte Monitoramento de dados de desempenho.

O script a seguir é executado indefinidamente até que o computador seja reinicializado, o WMI seja interrompido ou o script seja interrompido. Para interromper o script manualmente, use o Gerenciador de Tarefas para interromper o processo. Para interrompê-lo programaticamente, use o método Terminate na classe Win32_Process.

VB
              
              strComputer = "." Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" _ & strComputer & "\root\cimv2") 

While (True) Set object1 = objWMIService.Get( _ "Win32_PerfRawData_PerfOS_Processor.Name='_Total'") N1 = object1.PercentProcessorTime D1 = object1.TimeStamp_Sys100NS Wscript.Sleep(1000) set object2 = objWMIService.Get( _ "Win32_PerfRawData_PerfOS_Processor.Name='_Total'") N2 = object2.PercentProcessorTime D2 = object2.TimeStamp_Sys100NS ' CounterType - PERF_100NSEC_TIMER_INV ' Formula - (1- ((N2 - N1) / (D2 - D1))) x 100 PercentProcessorTime = (1 - ((N2 - N1)/(D2-D1)))*100 Wscript.Echo "% Processor Time=" , PercentProcessorTime Wend

Tarefas do WMI para scripts e aplicativos

Exemplos de aplicativo C++ do WMI

TechNet ScriptCenter