Фев 032012
 
PowerShell

Продолжаем разговор про PowerShell

Наверное это самая распространенная команда на PowerShell

Get-Process

Результатом будет:

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
     72       8     1180         52    42     0,02   1548 armsvc
   1968      10     2248       2592    64     4,92   1104 atieclxx
    118       7     1436        988    33     0,06    816 atiesrxx

Как мы видим, она показывает список процессов в системе, но вот досада, она не показывает загрузку CPU в %  каждого процесса, вместо этого она показывает  CPU(s). Что же это такое? Давай те разбираться.

Дело в том, что  CPU(s) – это время в сек. которое потратил процессор на выполнения процесса, т.е. в моем случае процесс  7zFM всего потратил 0,45 сек. на все свою работу. Но как это можно превратить в % ? Да очень просто: надо сделать 2 замера, посчитать разницу во времени между замерами и так же посчитать разницу потраченного  времени данным процессом. Давай те рассмотрим код:

cls
 
#Узнаем сколько у нас всего ядер
$core = Get-WmiObject -Class Win32_ComputerSystem | Select-Object NumberOfLogicalProcessors
 
#Первый замер
$data_start = Get-Date
$process_start = Get-Process | Where-Object {$_.Name -contains "7zFM"} | Select-Object TotalProcessorTime
 
# "Поспим" немного и "поработаем" в данном процессе
start-sleep -Seconds 5
 
#Второй замер
$data_stop = Get-Date
$process_stop = Get-Process | where-Object {$_.Name -contains "7zFM"}
 
#Подсчитаем загрузку
$Data_delta = $data_stop.Ticks - $data_start.Ticks
$CPU_delta = $process_stop.TotalProcessorTime.Ticks - $process_start.TotalProcessorTime.Ticks
 
if ($Data_delta -gt 0 -and $CPU_delta -gt 0){
    $CPU_Load = ($CPU_delta * 100) / ($Data_delta * $core.NumberOfLogicalProcessors)
}else{
    $CPU_Load = 0
}
# Выводим результат
Write-Host $CPU_Load

В результате мы получим загрузку в %. При небольшом изменении кода можно получить загрузку по всем процессам.

 Posted by at 23:49

Sorry, the comment form is closed at this time.