我试图在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值之前)。
非常感谢任何帮助。
答案 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的连续值,上述内容就会立即发送电子邮件。