.NET Framework などのオブジェクトを利用できる Windows 標準の CLI PowerShell で、実行中の各プロセスに対応した Process オブジェクトを取得して、 CPU 使用時間を Sort-Object コマンドレットを用いて降順(使用時間の多い順)に並び替えて表示するスクリプト例を紹介します。
並び替えの要素を指定するハッシュテーブルとスクリプトブロックについても簡単に紹介します。
※ Windows PowerShell PSVersion 5.1.19041.6093 を使用します。

スクリプト例
以下は、実行中の各プロセスの CPU 使用時間が多い順(降順)に並び替えて、プロセスの名前などをリストで表示する PowerShell のスクリプト例です。
Get-Process |
Sort-Object @{Expression = { $_.TotalProcessorTime.TotalSeconds }; Descending = $true}
以下の小さな章で、1つずつ、スクリプトについて説明します。
各プロセスに対応する全ての Process オブジェクトを取得
Get-Process コマンドレットで、プロセスの情報を持つ Process オブジェクトを取得します。
※厳密には PowerShell の Note Property によって CPU などのプロパティが追加されたオブジェクトですが、それについては公式のリファレンスが見つからないため触れません。
Get-Process |
今回は、実行中のすべてのプロセスのオブジェクトを取得します。
そのため、 Get-Process の後の | (パイプ) でつながった、下流の処理には、全てのプロセスのオブジェクトが1個ずつ順次送られて処理されます。
ローカル コンピューターで実行されているプロセスを取得します。
パラメーターがない場合、このコマンドレットはローカル コンピューター上のすべてのプロセスを取得します。
Process
Get-Process (Microsoft.PowerShell.Management) – PowerShell | Microsoft Learn
既定では、このコマンドレットは System.Diagnostics.Process オブジェクト 返します。
ローカル プロセスとリモート プロセスへのアクセスを提供し、ローカル システム プロセスを開始および停止できます。
Process クラス (System.Diagnostics) | Microsoft Learn
並び替える要素と降順・昇順をハッシュテーブルで指定
以下は、プロセスごとの CPU 使用時間によって、プロセスに対応する Process オブジェクト群を降順で並び替えることを Sort-Object コマンドレットに指定するハッシュテーブルを作成しています。
@{Expression = { $_.TotalProcessorTime.TotalSeconds }; Descending = $true}
@{} は、ハッシュテーブルを作成します。
@{} の中に「キー = 値」を指定することで、一つのキーと値のペアのデータを定義できます。
このデータは ; で区切ることで、1つのハッシュテーブル内に複数定義できます。
ハッシュテーブル (ディクショナリ配列または連想配列とも呼ばれます) は、1 つ以上のキーと値のペアを格納するコンパクトなデータ構造です。
about_Hash_Tables – PowerShell | Microsoft Learn
最初に定義されているペアは、 Expression というキーに {} で定義されたスクリプトブロックを代入しています。
Expression = { $_.TotalProcessorTime.TotalSeconds }
Expression は、Sort-Object コマンドレットで指定しているキーで、このキーの値で並び替えが行われます。
※複数のハッシュテーブルを指定した並び替えも可能です。
プロパティ値でオブジェクトを並べ替えます。
-Property
オブジェクトの並べ替えに使用Sort-Object
プロパティ名を指定します。ハッシュ テーブルの有効なキーは次のとおりです。
Sort-Object (Microsoft.PowerShell.Utility) – PowerShell | Microsoft Learn
Expression
–<string>
または<script block>
Ascending
またはDescending
–<boolean>
Expression キーには、文字列かスクリプトブロックを代入できます。
今回は {} で囲まれたスクリプトブロックを代入します。
about_Calculated_Properties – PowerShell | Microsoft Learn
Expression
– 新しいプロパティの値を計算するために使用される文字列またはスクリプト ブロック。Expression
が文字列の場合、値は入力オブジェクトのプロパティ名として解釈されます。 これは、Expression = { $_.<PropertyName> }
よりも短いオプションです。
Expression = の後の {} で定義されたスクリプトブロックは、無名の関数オブジェクトで、その関数が実行された結果の値を Expression キーの値に設定します。
スクリプト ブロックは、1 つのユニットとして使用できるステートメントまたは式のコレクションです。 ステートメントのコレクションは、中かっこ (
about_Script_Blocks – PowerShell | Microsoft Learn{}
) で囲んだり、関数として定義したり、スクリプト ファイルに保存したりできます。 スクリプト ブロックは値を返し、パラメーターと引数を受け取ることができます。
{ $_.TotalProcessorTime.TotalSeconds } の場合は、$_ 自動変数に格納されている Process オブジェクトに対応するプロセスの合計プロセッサ使用時間を並び替えの値として Expression キーの値に設定します。
$_
about_Automatic_Variables – PowerShell | Microsoft Learn
$PSItem と同じ。 パイプライン オブジェクト内の現在のオブジェクトを格納します。 この変数は、パイプライン内のすべてのオブジェクトに対してアクションを実行するコマンドで使用できます。
このプロセスの合計プロセッサ時間を取得します。
Process.TotalProcessorTime プロパティ (System.Diagnostics) | Microsoft Learn
; で区切られた次のデータ「Descending = $true」は、Expression で指定した値のグループを降順(数値の大きい方を最初に表示)にするか昇順にするかを指定します。
Descending キーに $true を入れると、降順で並び替えられます。
Descending キーも先述のとおり Sort-Object コマンドレットで指定されたキーです。
Ascending / Descending – 1 つ以上のプロパティの並べ替え順序を指定できます。 これらはブール値です。
about_Calculated_Properties – PowerShell | Microsoft Learn
以上のハッシュテーブルを Sort-Object コマンドレットに渡すことで、 CPU 使用時間の多い順に実行中の全てのプロセスに対応した Process オブジェクトが並び替えられます。
そのあと、並び替えられた順に Process オブジェクトの持つプロセス名や CPU 使用時間が1行ずつ出力されます。
実行結果
PowerShell アプリを起動して、先ほどのスクリプトをコピーした後、貼り付けて Enter キーで実行すると、プロセス名や CPU 使用時間が、 CPU 使用時間の多い順にソートされたリストが表示されました。
※ Windows 10 の場合はデスクトップの左下の検索ボックスで powershell⏎ と入力すると起動できます。
※ランキングは上位の一部のみを記載しています。

CPU(s) 項目がソートの対象になった CPU 使用時間です。降順で並んでいることが確認できます。
PS C:\Users\UserName> Get-Process |
>> Sort-Object @{Expression = { $_.TotalProcessorTime.TotalSeconds }; Descending = $true}
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
551 55 1057292 1094420 8,689.14 11940 3 chrome
1184 75 75652 66772 6,606.56 21724 3 wmplayer
660 72 117332 312264 1,907.53 22908 3 chrome
2419 230 317784 430108 1,497.23 1380 3 Copilot
4109 165 355416 611472 1,263.22 3696 3 chrome
749 42 356924 94848 906.64 1400 3 steamwebhelper
655 16 20736 23380 790.92 12528 0 audiodg
473 45 679512 498032 789.17 14992 3 chrome
まとめ
今回は、.NET Framework などのオブジェクトを利用できる Windows 標準の CLI PowerShell で、実行中の各プロセスに対応した Process オブジェクトを取得して、 CPU 使用時間を Sort-Object コマンドレットを用いて降順(使用時間の多い順)に並び替えて表示するスクリプト例を紹介しました。
並び替えの要素を指定するハッシュテーブルとスクリプトブロックについても簡単に紹介しました。
参照サイト Thank You!
- PowerShell とは – PowerShell | Microsoft Learn
- Get-Process (Microsoft.PowerShell.Management) – PowerShell | Microsoft Learn
- Process クラス (System.Diagnostics) | Microsoft Learn
- Process.TotalProcessorTime プロパティ (System.Diagnostics) | Microsoft Learn
- Sort-Object (Microsoft.PowerShell.Utility) – PowerShell | Microsoft Learn
- about_Hash_Tables – PowerShell | Microsoft Learn
- about_Script_Blocks – PowerShell | Microsoft Learn
- about_Automatic_Variables – PowerShell | Microsoft Learn
- about_Calculated_Properties – PowerShell | Microsoft Learn
記事一覧 → Compota-Soft-Press
コメント