プロセスの管理

プロセスの取得

 まず、現在のプロセス一覧を取得するには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:\>
inserted by FC2 system