2012-03-05 24 views
0

我想在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" 
} 

的問題是,我不能得到實際的計數器值會分配到$值變量。此外,我希望計數器每次代碼觸發時都會增加(在達到最大采樣值之前)。

任何幫助將不勝感激。

回答

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

獲取櫃檯返回的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

非常感謝你們。我認爲托馬斯的答案更接近我所需要的,但我知道我缺少的東西。我需要更多地瞭解結構,以及CookedValue的工作原理。非常感激。 – kickinchicken 2012-03-05 20:20:07

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

+0

您需要更改-Continuous的-MaxSamples參數,否則只會在計數器超過開始後的前N個間隔中的限制時發出警報,就像以前的建議一樣。 – jmb 2014-04-09 15:00:48