2016-01-29 25 views
0

我試圖找到具有給定組中最高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

'Get-Process | ProcessName類似於「c *」| 對CPU-Descending排序| Group ProcessName | Foreach-object {$ _。Group |選擇-First 1}'?它已經排序。無需重複這一點。 – Matt

+0

在你的例子中,你是不是想要匹配鉻2667的PID? – Matt

+0

我不是100%的標題變化。至少需要從標題中刪除標籤。如果你願意,但是不要回滾,請重新說明。 – Matt

回答

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。然後,從每個組中選取第一個條目。每個對象的最後一個是必需的,以防止對象數組被展開並且僅返回最高的整體條目。