Get-Process についてメモ
PowerShell の Get-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 が確認できる。