2016-01-29 2 views
0

Я пытаюсь найти процесс с самым высоким процессором в данной группе, в моем случае группа просто равна 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

'Get-Process | Где ProcessName -Like "c *" | Сортировка CPU -Descending | Группа ProcessName | Foreach-object {$ _. Group | Выбрать -Первый 1} '? Он уже отсортирован. Не нужно повторять это. – Matt

+0

В вашем примере вы не пытаетесь сопоставить PID 2676 для хром? – Matt

+0

Я не на 100% на изменение названия. Необходимо удалить тег, по крайней мере, из заголовка. Повторите попытку, если хотите, но не откат. – Matt

ответ

1

Итак, вы хотели получить процесс, когда процессор является самым высоким среди нитей одного и того же имени?

Get-Process -Name "c*" | 
    Sort-Object CPU -Descending | 
    Group ProcessName | 
    ForEach-Object{$_.Group | Select Id, ProcessName, CPU, Memory, Threads -First 1} 

-Name поддерживает подстановочные так что мы можем сохранить возвращение все процессы просто отказаться от большинства из них. Сделайте первый сортировку и группу по адресу processname. Затем просто возьмите первую запись из каждой отдельной группы. Последнее для каждого требуется для предотвращения разворачивания массива объектов и возврата только самой высокой общей записи.

Смежные вопросы