Мониторинг процессора с помощью примеров с использованием Get-WmiObject - PullRequest
0 голосов
/ 28 апреля 2019

Я использую командлет Get-WmiObject для мониторинга средней загрузки ЦП на серверах без установки PowerShell из-за требований безопасности.

$CPU = Get-WmiObject Win32_Processor -computername $computerName  | Measure-Object -property LoadPercentage -Average | Select Average


$CPULoad = $($CPU.average)                                   

if ( $CPULoad -ge $ThresholdCPU ){                                          

Write-output "High CPU usage: $CPULoad % on $computerName" 

} 
Else {

Write-output "CPU usage on $computerName is normal: $CPULoad %" 

}

Мой скрипт работает правильно, когда используется текущая загрузка ЦПпревышает порог ЦП, который я установил вручную.

Но я сталкиваюсь с множеством ложных предупреждений из-за скачков использования ЦП на удаленных серверах.

После прочтения документациикомандлет, я обнаружил, что в отличие от командлета Get-Counter, Get-WmiObject не имеет какого-либо свойства SampleInterval.

Есть ли способ выполнить это с помощью Get-WmiObject, поэтому критерии ifбудет верно только после 3 действительных образцов?

1 Ответ

0 голосов
/ 30 апреля 2019

Возможно, использование цикла для фиксированного числа раз может сделать то, что вы после:

$maxAttempts = 3                                
for ($attempt = 0; $attempt -lt $maxAttempts; $attempt++) {
    $CPULoad = (Get-WmiObject Win32_Processor -ComputerName $computerName  | 
                Measure-Object -property LoadPercentage -Average).Average
    if ( $CPULoad -le $ThresholdCPU ) { break }
    # do nothing for x seconds and test CPU load again
    Start-Sleep -Seconds 1
}

if ($attempt -lt $maxAttempts) {
    Write-output "CPU usage on $computerName is normal: $CPULoad %" 
}
else {
    Write-output "High CPU usage: $CPULoad % on $computerName" 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...