Получить имя процесса, который использует выше определенного количества процессора - PullRequest
0 голосов
/ 29 мая 2018

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

В принципе, вот как я представляю, как это работает: Если функция, которая находит процесс с более чем 70% загрузкой ЦП, будет отправлено SMS-сообщение нужным получателям, которое включает имя сервераи имя процесса.

СМС-часть, которую я разобрался, однако CPUUsage проблематичен.Кажется, что оператор if всегда заканчивается записью «Нет процессов с загрузкой ЦП выше 1%», даже если они есть.Кроме того, как мне получить имя процесса в функции, которая отправляет SMS?

    function CPUUsage ()
{
    $process = get-process
    foreach ($pro in $process){
    $name = $pro.ProcessName
    $CpuCores = (Get-WmiObject -Class Win32_Processor).NumberOfCores
    $CpuValue = ((Get-Counter "\Process($name)\% Processor Time").CounterSamples.CookedValue)/$CpuCores
    $percent = [Decimal]::Round($CpuValue, 3)
    if($percent -gt 1)
        {
            Write-Host $name
        } else {
            Write-Host "There are no processes above 1% CPU usage"   
        }
    }   
}

1 Ответ

0 голосов
/ 29 мая 2018

Функция использования процессора выглядит правильно.Я бы предложил добавить write-host для каждого имени процесса вместе с процентом.

Write-Host $name has $CpuValue % of CPU Usage.

для целей тестирования, вы можете поместить Where-Object в тяжелое приложение (например, Where-Object {$ _. Name -eq)."Скайп"}).В таком случае это должно идти в пределах, если условие.

$process = get-process | Where-Object {$_.Name -eq "Skype"} 
    foreach ($pro in $process){
    $name = $pro.ProcessName
    $CpuCores = (Get-WmiObject -Class Win32_Processor).NumberOfCores
    $CpuValue = ((Get-Counter "\Process($name)\% Processor Time").CounterSamples.CookedValue)/$CpuCores

    $percent = [Decimal]::Round($CpuValue, 3)

    Write-Host $name has $percent % of CPU Usage.

    if($percent -gt 1)
    {
        Write-Host $name
    } 
}

Вывод должен быть как

Skype has 46.655 % of CPU Usage.
Skype
...