如何通过将输出从Get-Process
传输到Where-Object
来列出使用CPU > 1%的进程?
完全入门的powershell,我所能想到的就是这样的东西
Get-Process | Where-Object { CPU_Usage -gt 1% }
发布于 2016-10-09 13:51:12
如果需要CPU百分比,可以使用get计数器获取性能计数器,并且可以为所有进程运行Get计数器。因此,要列出使用大于CPU使用量的5%的进程:
(Get-Counter '\Process(*)\% Processor Time').CounterSamples | Where-Object {$_.CookedValue -gt 5}
这将列出在采样的实例中使用CPU >5%的进程。希望这能有所帮助!
发布于 2016-10-09 13:44:08
这里有几点需要注意:
$_
变量来引用当前来自管道的对象。%
来表示百分比--相反,%
表示模数运算符。所以,当你想要百分比的时候,你必须自己转换你的数字,只需把它乘以0.01
。Get-Process
cmdlet没有字段CPU_Usage
;其输出的摘要可以找到这里。关于字段,CPU
是这样说的:“进程在所有处理器上使用的处理器时间量,以秒为单位。”所以要清楚你能从这些数字中得到什么。总结该命令可以编写为
Get-Process | Where-Object { $_.CPU -gt 100 }
这将为您提供使用超过100秒CPU时间的进程。
如果你想要一个相对语句,你首先必须总结所有使用的时间,然后将实际时间除以总时间。你可以得到总CPU时间,例如
Get-Process | Select-Object -expand CPU | Measure-Object -Sum | Select-Object -expand Sum
尝试将其与前面的命令叠加在一起。
发布于 2019-10-08 21:14:01
通过增加逻辑核数的动态检测来进一步改进早期的答案,这样就可以将百分比调整回我们普通人期望看到的结果,在这种情况下,100%意味着机器的所有CPU带宽,并且没有大于100%的值。包括一个10%的过滤器设置,它可以适当地调整。假设人们会感兴趣地寻找具有高过载处理器使用率的进程,而不想列出机器的众多空闲进程。
$NumberOfLogicalProcessors=(Get-WmiObject -class Win32_processor | Measure-Object -Sum NumberOfLogicalProcessors).Sum
(Get-Counter '\Process(*)\% Processor Time').Countersamples | Where cookedvalue -gt ($NumberOfLogicalProcessors*10) | Sort cookedvalue -Desc | ft -a instancename, @{Name='CPU %';Expr={[Math]::Round($_.CookedValue / $NumberOfLogicalProcessors)}}
样本输出:
InstanceName CPU %
------------ -----
_total 100
idle 100
https://stackoverflow.com/questions/39943928
复制相似问题