获取使用超过一定数量的CPU

时间:2018-05-29 12:23:46

标签: powershell process cpu

我一直在谷歌上试图弄清楚是否有一个聪明的方法来获得一个使用X%CPU以上的进程的名称。例如,在我们的环境中,某些进程最终会占用CPU,并且在大多数情况下它非常糟糕,我们无法连接到服务器以查看它是哪一个。

基本上这就是我想象它的工作原理: 如果找到CPU使用率超过70%的进程的函数,则将向必要的收件人发送包含服务器名称和进程名称的SMS。

我发现的SMS部分,CPUUsage很麻烦。 if语句总是似乎最终写入#34;没有超过1%CPU使用率的进程"即使有一些。另外,我如何将进程名称转换为发送SMS的函数?

    function CPUUsage ()
{
    $process = get-process
    foreach ($pro in $process){
    $name = $pro.ProcessName
    $CpuCores = (Get-WmiObject -Class Win32_Processor).NumberOfCores
    $CpuValue = ((Get-Counter "\Process($name)\% Processor Time").CounterSamples.CookedValue)/$CpuCores
    $percent = [Decimal]::Round($CpuValue, 3)
    if($percent -gt 1)
        {
            Write-Host $name
        } else {
            Write-Host "There are no processes above 1% CPU usage"   
        }
    }   
}

1 个答案:

答案 0 :(得分:0)

CPU使用率功能看起来正常。我建议在每个进程名称上添加write-host以及百分比。

Write-Host $name has $CpuValue % of CPU Usage.

出于测试目的,您可以将Where-Object放在繁重的应用程序上(例如Where-Object {$ _.Name -eq“Skype”})。在这种情况下,它应该在条件范围内。

$process = get-process | Where-Object {$_.Name -eq "Skype"} 
    foreach ($pro in $process){
    $name = $pro.ProcessName
    $CpuCores = (Get-WmiObject -Class Win32_Processor).NumberOfCores
    $CpuValue = ((Get-Counter "\Process($name)\% Processor Time").CounterSamples.CookedValue)/$CpuCores

    $percent = [Decimal]::Round($CpuValue, 3)

    Write-Host $name has $percent % of CPU Usage.

    if($percent -gt 1)
    {
        Write-Host $name
    } 
}

输出应该像

Skype has 46.655 % of CPU Usage.
Skype