powershell:cpu使用率,值为100时函数不起作用

mfuanj7w  于 2022-12-23  发布在  Shell
关注(0)|答案(1)|浏览(166)

我试图提供一个简短的脚本来通知我CPU使用率超过一定限度,但它只有在CPU〈100%时才起作用,但如果100%CPU工作则失败

$trashhold=90 
$doit=Get-WmiObject Win32_Processor | Measure-Object -Property LoadPercentage -Average | Select Average | Out-String

if ($doit -match "\d+"){ 
$doit = $matches[0]; 
}

if ($doit -gt $trashhold)
    {
        send email bla bla
    }
else 
    {
        Write-Output "less than $limit, do nothing"
    }

基本上,regex从Get-WmiObject函数中获取数值,如果cpu为99或更小,则脚本可以工作。对于100,即使它比垃圾桶(90)大,它也可以工作。错误在哪里?
尝试捕获错误,但没有结果(regex返回正确的数字)

5vf7fwbs

5vf7fwbs1#

不需要Out-String,也不需要regex,您只是将其过于复杂:

$threshold = 90
$cpuUsage  = (Get-CimInstance Win32_Processor | Measure-Object -Property LoadPercentage -Average).Average 

if($cpuUsage -gt $threshold) {
    # send email blah blah with `$cpuUsage`
}
else {
    "Less than $threshold, do nothing"
}

您要做的是从LoadPercentage属性中获取属性值,这可以通过member-access enumeration(如答案所示)或使用Select-Object -ExpandProperty LoadPercentage来完成。ForEach-Object LoadPercentage也可以工作(有关详细信息,请参阅-MemberName参数)。还有其他方法,但这些是最常用的方法。

相关问题