HOWTO · PowerShell

PowerShell で実行中のプロセスのリストを取得する方法

PowerShell の Get-Process を使用して、ローカルプロセスの一覧表示、名前による絞り込み、プロセスプロパティの確認、Windows で関連付けられたアカウントの取得を行います。

このページの内容

Get-Process を使用すると、ローカルコンピューターで実行中のプロセスを一覧表示し、プロセス名で結果を絞り込み、Id や CPU などの値を確認できます。以下の例は PowerShell コマンドであり、提供された実行時エビデンスでは実行されていません。プロセス名と表示される値は、コンピューターで何が実行されているかと PowerShell 環境によって異なります。

Get-Process で実行中のすべてのプロセスを一覧表示する

引数なしで Get-Process を実行すると、ローカルプロセスのプロセスオブジェクトが得られます。PowerShell はそれらのオブジェクトを表示用に書式設定し、通常は表形式にします。既定のビューには、Id(プロセス識別子)、ProcessName、CPU(秒単位の累積プロセッサ時間)、メモリ関連の値などのフィールドが含まれる場合があります。表示される列はビューであり、すべてのプロセスプロパティの完全な固定リストではありません。列と値は環境によって異なる場合があります。gps は Get-Process の任意のエイリアスです。

この例では、返された最初の 10 個のプロセスオブジェクトから有用なフィールドの小さな集合を選択します:

Get-Process | Select-Object -First 10 Id, ProcessName, CPU, WorkingSet64

名前でプロセスを探す

結果を絞り込むには、-Name にプロセス名を渡します。選択した名前は、コンピューターで実行中のものに置き換えます。名前の配列を渡して複数のプロセスの一致を取得することも、* のようなワイルドカード文字を使って名前パターンに一致させることもできます。この例では名前を現在のコンピューター上のプロセスから取得するため、特定のアプリケーションがインストールされていることに依存しません:

$names = @(Get-Process | Select-Object -First 2 -ExpandProperty ProcessName | Sort-Object -Unique)
if ($names.Count -gt 0) {
    Get-Process -Name $names
    $prefix = $names[0].Substring(0, [Math]::Min(2, $names[0].Length))
    Get-Process -Name "$prefix*"
}

Get-Process -Name は、複数のインスタンスが名前に一致する場合、複数のプロセスを返すことがあります。ワイルドカードは、プロセス名の一部しか分からない場合に便利です。自分のクエリで一致が返らない場合は、つづりと、そのプロセスが現在実行中かどうかを確認します。

プロセスプロパティを読み取る

Get-Process はオブジェクトを返すため、書式設定された表に頼らずにプロパティを直接読み取ることができます。Id はプロセス識別子です。CPU は、その値が利用可能な場合に秒単位の累積プロセッサ時間を報告します。ライブのパーセンテージ測定ではありません。名前は複数のプロセスオブジェクトに一致する場合があるため、プロパティへのアクセスで複数の値が生成されることがあります。この例では、ローカルコンピューターで見つかったプロセスから両方のプロパティを読み取ります:

$process = Get-Process | Select-Object -First 1
if ($process) {
    $process.Id
    $process.CPU
}

一致するプロセスごとにそれらのフィールドをまとめて表示したい場合は、名前フィルターの後に Select-Object Id, CPU を使用します。プロセスリストはスナップショットであるため、別々のコマンドの間にプロセスが開始または停止する場合があります。

プロセスの所有者を表示する

Windows では、-IncludeUserName を追加すると、返された各プロセスに関連付けられたアカウントを要求できます。アカウントの値は UserName として公開されます。ProcessOwner プロパティではありません。アカウント情報へのアクセスは、権限とプロセスによって異なる場合があります。このオプションはプラットフォーム固有であるため、それをサポートする Windows PowerShell 環境で使用します。アカウントの特定はトラブルシューティングに役立ちますが、プロセスを終了するためだけに必要というわけではありません。

この例では、コンピューターに現在存在するプロセスを選択し、アカウントを取得できない場合は検索エラーをテキストとしてキャプチャします:

$process = Get-Process | Select-Object -First 1
if ($process) {
    try {
        Get-Process -Id $process.Id -IncludeUserName | Select-Object Id, ProcessName, UserName
    }
    catch {
        "Could not retrieve UserName: $($_.Exception.Message)"
    }
}