我一直在谷歌上试图弄清楚是否有一个聪明的方法来获得一个使用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"
}
}
}
答案 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