如何循环获取计数器结果以做出决定?

时间:2012-03-05 19:37:27

标签: powershell powershell-v2.0

我试图在5分钟内获得以下计数器。如果它连续5次返回100,我想收到一封电子邮件。

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 :(得分:0)

我想你想要这样的东西:

$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%+
}

答案 1 :(得分:0)

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;
    }
}

答案 2 :(得分:0)

试试这个:

$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的连续值,上述内容就会立即发送电子邮件。