プロセスの管理
プロセスの取得
まず、現在のプロセス一覧を取得するにはGet-Processコマンドレットを使用します。
PS U:\> Get-Process
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
195 8 5332 8780 92 0.09 1556 aMPStation
82 4 2344 5172 63 0.09 1300 ATOK21MN
# 以下略
プロセス名を指定すると、名前で絞り込みが行われます。
PS U:\> Get-Process notepad
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
108 5 3176 9732 71 0.69 2716 notepad
PS U:\>
プロセスの停止
プロセスを停止するにはStop-Processコマンドレットを使用します。
PS U:\> Get-Process notepad | Stop-Process
PS U:\>
これでメモ帳が終了します。
Get-Processコマンドレットが返すデータは.NETのSystem.Diagnostics.Process型なので、その型のメソッドであるKill()メソッドで強制終了することもできます。
# notepadを1つだけ起動している場合
(Get-Process notepad).Kill()
# 複数起動しているうち1つだけ終了
(Get-Process notepad)[0].Kill()
# メモ帳すべて終了
Get-Process notepad | %{ $_.Kill() }
また、ウインドーを開いているプロセスの場合は、CloseMainWindow()メソッドを呼び出すことで「閉じる」ボタンを押したときの動作を実現できます。メモ帳のウインドーを1つだけ開いている場合は次の方法で閉じることができます。
PS U:\> (Get-Process notepad).CloseMainWindow()
True
PS U:\>
テキスト編集中のメモ帳をこれで閉じようとすると、保存するかどうか確認を求められます。また、結果のTrueは閉じることに成功したことを意味するのではなく「閉じる要求を送る」ことに成功したことを意味します。
プロセスが終了するまで待つ
System.Diagnostics.Process型のメソッドであるWaitForExit()メソッドを使用すると、プロセスが終了するのを待ちます。
PS U:\> (Get-Process notepad).WaitForExit()
PS U:\> # この行はメモ帳終了後に表示
強制終了して終了するまで待つには次のようにします。
PS U:\> Get-Process notepad | %{ $_.Kill(); $_.WaitForExit() }
PS U:\>
プロセスの実行パスを取得する
Get-Processで取得したプロセスのオブジェクトはPathプロパティを持っているので、それを取得することでプロセスのパスが分かります。次の例では、PowerShell.exeのパスを取得します。
PS U:\> $process = Get-Process powershell | Select-Object -First 1
PS U:\> $process.Path
C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe
PS U:\>