返回具有最高特定属性的组中的成员

时间:2016-01-29 20:08:25

标签: powershell

我正在尝试查找给定组中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数组中不存储每个组中的第一个的情况下执行相同的操作?

1 个答案:

答案 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上进行第一次排序和分组。然后从每个组中取出第一个条目。每个的最后一个都需要防止对象数组展开,并且只返回最高的整体条目。