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