システムの実行中のプロセスを表示するために PowerShell Get-Process コマンドレットを使用することに興味がありますか? Get-Process
を使用すると、プロセスの所有者、プロセス ID、またはプロセスがディスク上のどこにあるかを見つけることができます。
この記事では、実際の例を通じて PowerShell の Get-Process
コマンドレットの使用方法を学びます。Windows や Linux 上でプロセスを操作して自分の意に従わせることが楽しいと思えば、読み続けてください!
関連記事: ps、pgrep、pkill などを使用した Linux でのプロセスの終了方法!
前提条件
この記事の例に従うためには、以下の前提条件が必要です。
- ほとんどの例では Windows PowerShell 5.1 が十分ですが、Linux のサポートには PowerShell 7.1 以降が必要です。
関連記事: PowerShell 7 へのアップグレード:手順
- この記事では Windows 10 と Ubuntu 20.04 LTS を使用していますが、PowerShell が実行される任意の OS で動作します。
準備はできましたか? では、いくつかのプロセスを管理してみましょう!
実行中のプロセスの表示
Get-Process
はローカルのプロセスを管理します。最初の例では、PowerShellのGet-Process コマンドレットを使用しています。このコマンドは実行中のすべてのプロセスを表示します。
Get-Process
はシステムの実行中のプロセス情報の一時的なスナップショットを返します。リアルタイムのプロセス情報を表示するには、WindowsではWindowsタスクマネージャ、Linuxではtopコマンドが利用できます。
始めるには、PowerShellコンソールを開き、Get-Process
を実行します。以下に示すように、Get-Process
は実行中のプロセス情報を返します。出力形式はWindowsとLinuxのオペレーティングシステムで同じです。

Get-Process
cmdlet on Windows to display local processes.デフォルトでは、
gps
またはps
はGet-Process
のコマンドエイリアスとして存在します。PowerShell 7はクロスプラットフォームであるため、ps
コマンドは組み込みのLinuxコマンドと競合します。したがって、ps
はLinuxでは動作せず、gps
エイリアスのみが使えます。
Get-Process
の出力の意味はすぐには明らかではありません。デフォルトのGet-Process
のプロパティは以下のように詳しく説明されています。
- NPM(K) – プロセスが使用している非ページングメモリの量をキロバイトで表示します。
(K)
の注釈で示されています。 - PM(M) – プロセスが使用しているページング可能なメモリの量をメガバイト単位で表示します。
(M)
表記によって示されます。 - WS(M) – プロセスのワーキングセットのサイズをメガバイト単位で表示します。ワーキングセットには、プロセスが最近参照したメモリのページが含まれます。
- VM(M) – プロセスが使用している仮想メモリの量をメガバイト単位で表示します。これには、ディスク上のページングファイルに格納されているデータも含まれます。
- CPU(S) – プロセスがすべてのプロセスで使用したプロセッサ時間の量を秒単位で表示します。
- Id – プロセスのプロセスID(PID)です。
- SI – 実行中のプロセスのセッション識別子です。セッション
0
は、プロセスがすべてのユーザーに利用可能であることを示し、1
は、プロセスが最初にログインしたユーザーの下で存在することを示します。 - ProcessName – 実行中のプロセスの名前です。
フルプロパティ名にマップされたプロパティエイリアスのリストを表示するには、
Get-Process | Get-Member -MemberType 'AliasProperty'
コマンドを使用します。
以下は別の素晴らしい例です。 brave プロセスの各インスタンスについて、そのプロセスのID ($_.id
) を使用し、Get-NetTCPConnection
に渡します。 PowerShell は、Get-NetTCPConnection
を使用して、brave プロセスが開いている各ネットワーク接続に関する情報を取得します。
以下のコードをPowerShellセッションで実行してください。ただし、Braveブラウザが実行中である必要があります。
Jay Adamsさんのご協力に感謝します。 SystemFrontierでのご協力もありがとうございます!
おめでとうございます。これでWindowsとLinuxの両方で実行中のプロセスをすべて表示することができます。 Get-Process
を使用してください。
特定のプロセス属性を見つける
Get-Process
は、先に見たように、実行中のプロセスに関するさまざまなプロパティを返します。他のPowerShellオブジェクトと同様に、オブジェクトのプロパティを選択的に取得することができます。
具体的なプロセスの特定のプロパティを取得するシンプルな例を見てみましょう:
- Windowsの電卓を起動します。
2. PowerShellコンソールを開き、Name
パラメータを使用してCalculatorという名前の実行中のプロセスのみを表示するためにGet-Process
を実行します。これまでに見た出力と同じものが表示されます。
Get-Process
は予想どおり多くのプロパティを返します。たとえば、CPU(s)
列の値でCPU使用率を見つけたい場合は、以下に示すようにGet-Process
コマンドをかっこで囲み、CPU
プロパティを参照します。すると、CPU
プロパティの値のみが返されることがわかります。
Get-Process
はCPU(s)
という名前を返しますが、上記のコードスニペットでは単にCPU
という名前を使用しています。PowerShellでは、出力で実際のプロパティ名が表示されない場合があります。この概念はPS1XMLフォーマットファイルを使用して実行されます。
CPU時間は、コア全体の秒数の合計として表されます。より人間が読みやすい数値にするために、Math
メソッドを使用して小数第一位に丸めます。以下に示すように。

上記の方法を使用して、
Id
のような他のプロパティも検索できます。プロセスのIDのみを表示したい場合に使用できます。
Calculatorアプリケーションを実行したままにしておいてください。後続の例では、このアプリケーションを使用します。
プロセスのメモリ使用量の取得
遅いシステムのトラブルシューティングは課題となることがあり、制約されたメモリが原因となることがよくあります。Calculatorアプリを使用して、Calculator
プロセスを取得し、VM
プロパティのみを表示します。以下の例では、使用されているメモリがメガバイト(MB)で表示されます。

Calculator
process memory usage.メモリ使用状況を理解するために、メガバイト(MB)をギガバイト(GB)に変換するために、組み込みのPowerShell変換乗数を利用してください。以下の例では、メモリ使用量をGBに変換し、.NET数学ライブラリのRound
メソッドを使用して値を丸めます。スクリーンショットに示されているように。
組み込みのPowerShellユーティリティを使用して値を変換すると、出力を理解しやすくすることができます。プロセスのIDを見つける方法については、以下を読んでください。

知られていないプロパティを公開する
Get-Process
では、すべてのプロパティがデフォルトで含まれたり表示されたりするわけではありません。以下を読んで、Path
およびUserName
プロパティについての詳細と使用方法を学んでください!
プロセスのバイナリが格納されている場所を特定する
プロセスの実行可能ファイルはシステム上のさまざまな場所に格納されている場合があります。プロセスが現在実行中の場合、Get-Process
を使用すると、Path
はデフォルトでは表示されませんが、プロセスのファイルシステムパスを簡単に見つけることができます。以下に示すように、Path
プロパティにはプロセス実行可能ファイルのファイルシステムの場所が含まれています。

Get-Process
to display a process’s full file system path on Windows.Windowsと同様に、LinuxのGet-Process
もファイルシステムのパスを返します。以下の例では、gnome-calculator
プロセスが実行され、コンソール出力にパスが表示されます。

Get-Process
to display a process’s full file system path on Linux.狡猾な悪意のあるアクターは、信頼できるプロセスと同じまたは類似した名前のプロセスを作成することがあります。そのため、ファイルシステムのパスを特定できる能力は、セキュリティインシデント対応(IR)シナリオに役立ちます。デフォルトの出力にはUserName
が含まれていないため、プロセスの所有者を特定する方法を知るために読み続けてください。
プロセスの所有者を見つける
出力にUserName
の値を含めるには、IncludeUserName
パラメータを使用する必要があります。特に他のユーザーのプロセスを無意識に終了しないようにするために、プロセスの所有者を知ることは重要です。以下のように、UserName
プロパティがプロセスの出力に含まれるようになります。

Calculator
process on Windows.最後に、リモートコンピュータでGet-Process
を使用してプロセス情報を取得する方法について学びましょう!
リモートコンピュータでプロセスを検索する
Windows PowerShellでは、Get-Process
自体にはリモート機能はありませんが、常にPowerShellリモートとInvoke-Command
を活用してリモートコンピュータ上で実行できます。
関連記事: WindowsとLinuxでのPSRemotingの設定方法
しかし、Linuxを使用している場合やWindowsでPowerShell 6を実行している場合、リモートコンピュータ上のプロセスをクエリするために使用できるComputerName
パラメータがあります。
-ComputerName
パラメータはPowerShell 7.xで削除されました。このコマンドレットは直接リモート操作に関連していないためです。同じ結果を得るためには、Invoke-Command
で囲むことができます。以下のようになります:Invoke-Command -ComputerName "ComputerName" -ScriptBlock { Get-Process -ProcessName 'process' }
上記のコマンドをリモートコンピュータに対して実行すると、Get-Process
コマンドがローカルで実行された場合と同じ出力が表示されます。
以下は、別のコンピュータにリモート接続し、実行中のプロセスを取得する例です:

複数のコンピュータを指定するには、コンマで区切って指定します。例:
Get-Process -ComputerName SRV1,SRV2.
次の手順
この記事では、PowerShellのGet-Process
コマンドレットを使用して、ローカルおよびリモートコンピュータ(LinuxおよびWindowsの両方)で実行中のプロセスを検索する方法を学びました。
では、この知識をどのように活用しますか?Get-Process
で取得したプロセスをローカルまたはリモートコンピュータに渡してStop-Process
を使用して終了させてみてください!
Source:
https://adamtheautomator.com/powershell-get-process/