Это должно дать вам то, что вы хотите (не забудьте также включить ваше определение $properties
):
1 .. 5 |
ForEach-Object {
Get-WmiObject -class Win32_PerfFormattedData_PerfProc_Process
} | Where-Object Name -notin '_Total','Idle' |
Sort-Object -Property 'PercentProcessorTime' -Descending |
Select-Object -First 1 -Property $properties
1 .. 5
- это оператор диапазона , который генерирует наборчисел 1,2,3,4,5.Это просто быстрый взлом для запуска ForEach-Object
5 раз.
Where-Object Name -notin '_Total','Idle'
исключает некоторые «процессы», которые всегда имеют высокие значения, но вряд ли будут тем, что вы ищете.Как правило, более эффективно обновить вызов до Get-WmiObject
, чтобы исключить их на этом этапе, но для ясности я выбрал эту технику.
Sort-Object -Property 'PercentProcessorTime' -Descending
берет все показания исортирует их по порядку от наибольшего значения ЦП к наименьшему.
Select-Object -First 1 -Property $properties
Выбирает только первый объект в отсортированном списке (т. е. объект с наибольшим значением).Обратите внимание, что лучше делать это последним, а не после каждого вызова Get-WmiObject
, так как он создает новый пользовательский объект для каждого возвращаемого WMI, почти все из которых мы отбрасываем далее по линии - это эффективнее сделать 'дублирование "только для конечного объекта, который мы выбираем.