Powershell 获取使用超过一定数量CPU的进程的名称

Powershell 获取使用超过一定数量CPU的进程的名称,powershell,process,cpu,Powershell,Process,Cpu,我一直在用谷歌搜索,试图找出是否有一种聪明的方法来获取使用X%以上CPU的进程的名称。例如,在我们的环境中,某些进程最终占用了CPU,在大多数情况下,情况非常糟糕,我们无法连接到服务器以查看它是哪一个 基本上这就是我想象的工作方式: 如果函数发现CPU使用率超过70%的进程,则会向必要的收件人发送SMS,其中包括服务器名称和进程名称 然而,我已经弄明白了SMS的部分,CPUUsage很麻烦。if语句似乎总是以写“没有CPU使用率超过1%的进程”结束,即使有一些进程。此外,我将如何将进程名称输入发

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

基本上这就是我想象的工作方式: 如果函数发现CPU使用率超过70%的进程,则会向必要的收件人发送SMS,其中包括服务器名称和进程名称

然而,我已经弄明白了SMS的部分,CPUUsage很麻烦。if语句似乎总是以写“没有CPU使用率超过1%的进程”结束,即使有一些进程。此外,我将如何将进程名称输入发送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"   
        }
    }   
}

CPU使用功能看起来正常。我建议在每个进程名上添加写主机,并加上百分比

Write-Host $name has $CpuValue % of CPU Usage.
出于测试目的,您可以将Where对象放在繁重的应用程序上(比如Where对象{$\.Name-eq“Skype”})。在这种情况下,它应该在if条件内

$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

谢谢你,这似乎让我接近了我的目标。我将如何进行短信转发。我尝试过这样做:If(CPUUsage($percent)-gt 3){SMS}但我没有收到文本消息,即使它将以下内容写入主机:Idle占用了119183%的CPU使用率。(我故意只放了“空闲”)