Как мне просмотреть результаты счетчика get, чтобы принять решение? - PullRequest
0 голосов
/ 05 марта 2012

Я пытаюсь получить следующий счетчик в течение 5 минут. Если он возвращает 100, 5 раз подряд, я хотел бы получить электронное письмо.

get-counter -Counter "\Processor(_Total)\% Processor Time" -SampleInterval 60 -MaxSamples 5

Я пытался присвоить этот блок кода переменной, например:

$value = get-counter -Counter "\Processor(_Total)\% Processor Time" -SampleInterval 60 -MaxSamples 5

if($value eq 100)
{
  $counter = $counter + 1
}

if($counter > 4)
{
"send an email"
}

Проблема в том, что я не могу получить фактическое значение счетчика, которое будет присвоено переменной $ value. Кроме того, я бы хотел, чтобы счетчик увеличивался при каждом запуске кода (до того, как он достигнет значения maxsamples).

Любая помощь будет высоко ценится.

Ответы [ 3 ]

0 голосов
/ 06 марта 2012

Get-Counter возвращает массив типа Microsoft.PowerShell.Commands.GetCounter.PerformanceCounterSampleSet, поэтому вы должны работать с ним следующим образом:

чуть более универсальное решение:


$sampleInterval = 60 # in seconds
$samples = 50 # samples taken
$inRowSamples = 5 # 5 samples in a row
$shouldntExceed = 0.95 # 95%

$values = get-counter -Counter "\Processor(_Total)\% Processor Time" -SampleInterval $sampleInterval -MaxSamples $samples

$count = 0
foreach ($value in $values)
{
    if ($value.CounterSamples[0].CookedValue -gt $shouldntExceed)
    {
        $count++;
    }
    else
    {
        $count = 0;
    }

    if ($count -ge $inRowSamples)
    {
        # send email
        break;
    }
}

0 голосов
/ 06 марта 2012

Попробуйте это:

$maxCount = 5;
$maxValue = 100;
$count = 0;
get-counter -Counter "\Processor(_Total)\% Processor Time" -SampleInterval 1 -MaxSamples 5 | %{

    if($_.CounterSamples[0].CookedValue -ge $maxValue){
        $count++;
    }
    #handling the n times in a row condition
    else{
        $count=0
    }
    if($count -eq $maxCount){
        write-host "exceeded"
        #send email
        break
    }

}

Поскольку мы используем конвейер, вышеприведенное отправит электронное письмо, как только у вас будет 5 непрерывных значений, больших или равных 100.

0 голосов
/ 06 марта 2012

Я думаю, вы хотите что-то вроде этого:

$value = get-counter -Counter "\Processor(_Total)\% Processor Time" -SampleInterval 1 -MaxSamples 5
$Total = $Value | % { $_.CounterSamples[0].CookedValue } | Measure -Sum;

if ($Total.Sum -ge 490) {
    # Total CPU usage was 490+
}

Или, если вы хотите сделать это в процентах, сделайте это:

$value = get-counter -Counter "\Processor(_Total)\% Processor Time" -SampleInterval 1 -MaxSamples 5
$Total = $Value | % { $_.CounterSamples[0].CookedValue } | Measure -Average;

if ($Total.Average -ge 95) {
    # Total CPU usage was 95%+
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...