我正在尝试查找给定组中CPU最高的进程,在我的情况下,该组只是processname
。假设我正在运行这些进程:
Id ProcessName CPU Memory Threads
-- ----------- --- ------ -------
7532 MicrosoftEdgeCP 40,3125 355,51953125 27
1680 powershell_ise 47,875 214,1015625 23
7568 lync 7,9375 213,859375 52
9664 chrome 19,71875 167,9609375 12
4216 MicrosoftEdgeCP 92,578125 152,2890625 26
5392 explorer 31,09375 116,390625 66
2676 chrome 23,390625 110,96875 41
9812 chrome 14,625 100,859375 8
2872 MsMpEng 100,5234375 36
5752 SearchUI 2,609375 90,0625 23
我正在尝试找到Chrome(9664)。目前我有这段代码:
$list = @()
$grouped = Get-Process | Where ProcessName -Like "c*" |
Sort CPU -Descending |
Group ProcessName |
Select $_ -First 10
$grouped
foreach($item in $grouped) {
$list += @($item.Group |
Sort CPU -Descending |
Select Id, ProcessName, CPU, Memory, Threads -First 1)
}
$list | ft -Wrap
是否可以在$list
数组中不存储每个组中的第一个的情况下执行相同的操作?
答案 0 :(得分:1)
所以你想得到CPU在同名线程中最高的进程吗?
Get-Process -Name "c*" |
Sort-Object CPU -Descending |
Group ProcessName |
ForEach-Object{$_.Group | Select Id, ProcessName, CPU, Memory, Threads -First 1}
-Name
支持通配符,因此我们可以保存返回所有进程,只是为了删除大部分进程。在processname
上进行第一次排序和分组。然后从每个组中取出第一个条目。每个的最后一个都需要防止对象数组展开,并且只返回最高的整体条目。