PowerShell ハッシュテーブル指定ソートでCPU使用時間順プロセス表示

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

PowerShell ハッシュテーブル指定ソートでCPU使用時間順プロセス表示

スクリプト例

以下は、実行中の各プロセスの 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
既定では、このコマンドレットは System.Diagnostics.Process オブジェクト 返します。

Get-Process (Microsoft.PowerShell.Management) – PowerShell | Microsoft Learn

ローカル プロセスとリモート プロセスへのアクセスを提供し、ローカル システム プロセスを開始および停止できます。

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 プロパティ名を指定します。

ハッシュ テーブルの有効なキーは次のとおりです。

  • Expression – <string> または <script block>
  • Ascending または Descending – <boolean>
Sort-Object (Microsoft.PowerShell.Utility) – PowerShell | Microsoft Learn

Expression キーには、文字列かスクリプトブロックを代入できます。
今回は {} で囲まれたスクリプトブロックを代入します。

Expression – 新しいプロパティの値を計算するために使用される文字列またはスクリプト ブロック。 Expressionが文字列の場合、値は入力オブジェクトのプロパティ名として解釈されます。 これは、 Expression = { $_.<PropertyName> }よりも短いオプションです。

about_Calculated_Properties – PowerShell | Microsoft Learn

Expression = の後の {} で定義されたスクリプトブロックは、無名の関数オブジェクトで、その関数が実行された結果の値を Expression キーの値に設定します。

スクリプト ブロックは、1 つのユニットとして使用できるステートメントまたは式のコレクションです。 ステートメントのコレクションは、中かっこ ({}) で囲んだり、関数として定義したり、スクリプト ファイルに保存したりできます。 スクリプト ブロックは値を返し、パラメーターと引数を受け取ることができます。

about_Script_Blocks – PowerShell | Microsoft Learn

{ $_.TotalProcessorTime.TotalSeconds } の場合は、$_ 自動変数に格納されている Process オブジェクトに対応するプロセスの合計プロセッサ使用時間並び替えの値として Expression キーの値に設定します。

$_
$PSItem と同じ。 パイプライン オブジェクト内の現在のオブジェクトを格納します。 この変数は、パイプライン内のすべてのオブジェクトに対してアクションを実行するコマンドで使用できます。

about_Automatic_Variables – PowerShell | Microsoft Learn

このプロセスの合計プロセッサ時間を取得します。

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⏎ と入力すると起動できます。
※ランキングは上位の一部のみを記載しています。

PowerShell ハッシュテーブル指定ソートでCPU使用時間順プロセス表示

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!

記事一覧 → Compota-Soft-Press

コメント

Ads Blocker Image Powered by Code Help Pro

お願い - Ads Blocker Detected

このサイトは広告を掲載して運営しています。

ポップアップを閉じて閲覧できますが、よろしければ

このサイト内の広告を非表示にする拡張機能をオフにしていただけませんか?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました