日々是好日

プログラミングについてのあれこれ、ムダ知識など

Get-Process についてメモ

PowerShellGet-Process コマンドレットについてわかったことメモ。


PS> get-process -id [id_num]

Get-Processコマンドレットでプロセスを取得。
id_num で存在しないプロセスを指定すると、ProcessCommandException が発報。
存在するプロセスを探しに行くのが前提のため。


PS> get-process -name [string[]]

Name パラメータを指定すると、プロセスのサブセットをプロセス名で取得できる。
ワイルドカード(*)使用可能、カンマ区切りで複数の値を指定可能。

.NET System.Diagnostics.Process クラスは PowerShell のプロセスの基礎となるクラス。
そのためPSのプロセスには System.Diagnostics.Process の表記規則の一部が使用されており、そのひとつとして実行可能ファイルのプロセス名末尾に .exe は付かない。

ComputerName パラメータを使用すると、リモートコンピュータ上のプロセスを取得できる。
ローカルコンピュータは localhost


PS> stop-process -name [name[]]

Stop-Process コマンドレットでプロセスを停止。IDまたはName指定。
Idle ( id = 0 ) 等、停止できないプロセスを指定すると、ProcessCommandException が発報。

Comfirm パラメータを指定すると、ワイルドカードで指定したとき等、意図しないプロセスを停止しないように強制的に確認メッセージを表示する。


PS> get-process | where-object -filterscript {$_.responding -eq $false } | stop-process

パイプ演算子により、応答しないアプリだけプロセスを停止する処理。
$_.responding :引き渡されたオブジェクト( Get-Process で取得した個々のプロセスオブジェクト)の Responding プロパティ。これが false のものだけ Stop-Process に進む。

Where-Object コマンドレットは、オブジェクトのコレクションから条件に一致するオブジェクトを抽出するコマンド。エイリアスwhere
SQL の Where 句と似てる。
FilterScript パラメータは指定しなくても大丈夫かもしれない。未検証。


PS> invoke-command -computername Server01 { stop-process powershell }

Stop-Process コマンドレットには ComputerName パラメータがないため、リモートコンピュータ上のプロセスを停止するには Invoke-Command を使用して処理を委譲する。


PS> get-process -name powershell | where-object -filterscript { $_.id -ne $pid } | stop-process -passthru

現在の PowerShell 以外の PowerShell セッションを強制的に終了する。
PowerShell の各セッションには、PowerShell プロセスの ID を保持する環境変数 $PID が割り当てられているため、$PID と各セッションの ID を照合することで、異なるIDを持つ PowerShell セッションだけを強制終了できる。

PassThru パラメータを指定すると強制終了されたセッションが一覧表示される。
単体で $PID と打てば、現在の PowerShell のプロセス ID が確認できる。