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

Используйте классы WMI, которые получают данные от счетчиков производительности, для доступа к данным о производительности компьютера и их обновления. Другие примеры см. в центре сценариев TechNet по адресу https://www.microsoft.com/technet. Дополнительные сведения см. в разделах Библиотеки производительности и WMI и Мониторинг данных производительности.

Примеры скриптов, показанные в этом разделе, получают данные только с локального компьютера. Дополнительные сведения об использовании скрипта для получения данных с удаленных компьютеров см. в разделе Подключение к WMI на удаленном компьютере.

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

Запуск сценария

  1. Скопируйте код и сохраните его в файле с расширением VBS, например filename.vbs. Убедитесь, что текстовый редактор не добавляет расширение .txt в файл.
  2. Откройте окно командной строки и перейдите в каталог, в котором сохранен файл.
  3. Введите cscript filename.vbs в командной строке.
  4. Если вы не можете получить доступ к журналу событий, проверка, чтобы узнать, выполняется ли вы из командной строки с повышенными привилегиями. Некоторые журналы событий, например журнал событий безопасности, могут быть защищены средствами управления доступом пользователей (UAC).

Примечание

По умолчанию cscript отображает выходные данные скрипта в окне командной строки. Так как скрипты WMI могут создавать большие объемы выходных данных, может потребоваться перенаправить выходные данные в файл. Введите cscript filename.vbs > outfile.txt в командной строке, чтобы перенаправить выходные данные скриптаfilename.vbs на outfile.txt.

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

Часто выполняемые действия в новом интерфейсе Классы или методы WMI
... получить данные счетчика производительности, которые отображаются в служебной программе Perfmon в скрипте? Используйте классы, имена которых начинаются с "Win32_PerfFormattedData", например Win32_PerfFormattedData_PerfProc_Process. Свойства с такими именами, как PageFileBytes , соответствуют счетчикам производительности, которые отображаются в Perfmon. Классы "Win32_PerfFormattedData" вычисляют конечные значения счетчиков.
... получить данные о производительности для одного процесса, диска и других данных? Используйте Win32_PerfFormattedData_PerfProc_Process или соответствующий форматированный класс счетчика производительности и метод SWbemObjectEx.Refresh_ . Дополнительные сведения см. в статье Создание скриптов с помощью SWbemObject.
В C++ используйте IWbemConfigureRefresher::AddObjectByPath и IWbemRefresher::Refresh. Дополнительные сведения см. в разделе Мониторинг данных производительности.
Следующий скрипт выполняется до тех пор, пока компьютер не перезагрузится, не будет остановлен инструментарий WMI или пока скрипт не будет остановлен. Чтобы остановить скрипт вручную, используйте диспетчер задач, чтобы остановить процесс. Чтобы остановить его программным способом, используйте метод Terminate в классе 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

... получить данные о производительности для всех процессов без повторного опроса?

Используйте классы, имена которых начинаются с "Win32_PerfFormattedData" и объекта SWbemRefresher . Средство обновления содержит объекты, поэтому вам не нужно повторно получать коллекцию. Для вычисления данных о производительности требуется не менее двух значений, так как большинство счетчиков являются счетчиками скорости. При первом отображении данных средства обновления они пусты.

Следующий скрипт выполняется неограниченно долго, пока компьютер не перезагрузится, не будет остановлен инструментарий WMI или пока скрипт не будет остановлен. Чтобы остановить скрипт вручную, используйте диспетчер задач, чтобы остановить процесс. Чтобы остановить его программным способом, используйте метод Terminate в классе 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"). Набор объектов

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

... получить и рассчитать данные о производительности для процессов в Windows 2000?

Используйте классы Win32_PerfRawData, например Win32_PerfRawData_PerfProc_Process. Дважды получите данные свойства, такие как PercentProcessorTime, для определенного процесса. Найдите формулу, указанную в квалификаторе CounterType для свойства , и вычислите. CounterType в примере PERF_100NSEC_TIMER_INV. Дополнительные сведения см. в разделе Мониторинг данных производительности.

Следующий скрипт выполняется неограниченно долго, пока компьютер не перезагрузится, не будет остановлен инструментарий WMI или пока скрипт не будет остановлен. Чтобы остановить скрипт вручную, используйте диспетчер задач, чтобы остановить процесс. Чтобы остановить его программным способом, используйте метод Terminate в классе 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

Задачи WMI для сценариев и приложений

Примеры приложений WMI C++

TechNet ScriptCenter