Статья рассказывает, как написать скрипт для определения загрузки процессора в процентах на Windows платформе. Это может быть полезно, например, для мониторинга нагрузки процессора на компьютере.
Скрипт написан на WSH JScript с использованием WMI. Его можно запустить из командной строки или bat файла.
Скрипт загрузки процессора, включая все ядра
Win32_PerfFormattedData_PerfOS_Processor class позволяет считать загрузку всех процессоров, включая логические процессоры. Например, на картинке вышу показаны логические процессоры (ядра). Определение загрузки процессора реализуется следующим скриптом:
var computer_name = ".";
var wmi = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\"+
computer_name+"\\root\\cimv2");
var p = wmi.ExecQuery("select * from Win32_PerfFormattedData_PerfOS_Processor");
var e = new Enumerator(p);
for (; !e.atEnd(); e.moveNext()){
WScript.Echo(e.item().Name +
" " + e.item().PercentProcessorTime);
}
Этот скрипт выводит информацию по всем процессорам (ядрам) компьютера (запускаем как CSCRIPT //NOLOGO cpu_load_all.js
):
0 44 1 20 2 8 3 63 _Total 34
Этот вывод означает, что на компьютере имеется четыре процессора (ядра), в первых четырёх строках указана загрузка для каждого из них (соответственно, 44%, 20%, 8% и 63%), и последняя строка содержит общую загрузку процессора 34%.
Скрипт загрузки процессора – общее значение
Если нам нужны значения по ядрам, то надо обрабатывать первые строки. Чаще достаточно только общего процента загрузки процессора, для этого отфильтровываем записи в запросе (Name='_Total'
), соответственно, строка для вывода будет одна, и скрипт определения загрузки процессора компьютера преобразуется к следующему виду:
var computer_name = ".";
var wmi = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\"+
computer_name+"\\root\\cimv2");
var p = wmi.ExecQuery("select * from Win32_PerfFormattedData_PerfOS_Processor where Name='_Total'");
var e = new Enumerator(p);
WScript.Echo(e.item().PercentProcessorTime);
Вывод CSCRIPT //NOLOGO cpu_load_total.js
предельно простой – это общая загрузка процессора в процентах:
11
Т.е. загрузка общая загрузка CPU составляет 11%.
Как можно развить скрипт:
- можно добавить проверку значения, например, если значение превышает 85% (
e.item().PercentProcessorTime > 85
), отправить предупреждение администратору. - подставляя в переменную
computer_name
сетевые имена других компьютеров, можно организовать мониторинг группы серверов на предмет повышенной нагрузки с соответствующим оповещением администратора.
Запуск в bat файле
Для получения и вывода загрузки процессора в командном файле можно запускать этот скрипт той же командой:
CSCRIPT //NOLOGO cpu_load_total.js
Чтобы в bat файле получить значение загрузки, нужно добавить в скрипт команду на передачу значения загрузки в качестве возвращаемого значения (return code):
var computer_name = ".";
var wmi = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\"+
computer_name+"\\root\\cimv2");
var p = wmi.ExecQuery("select * from Win32_PerfFormattedData_PerfOS_Processor where Name='_Total'");
var e = new Enumerator(p);
WScript.Echo(e.item().PercentProcessorTime);
WScript.Quit(e.item().PercentProcessorTime);
Теперь, вызывая скрипт в bat файле, можно будет обрабатывать значение загрузки процессора:
cscript //nologo cpu_load_total.js
if errorlevel 85 ...
Файлы для скачивания
Эти и другие скрипты можно скачать по ссылке
См. также
По считыванию информации о состоянии компьютера см. также Получить информацию о дисках
См. Все скрипты с использованием WMI