[PS]バックグランド ジョブ

新年、明けましておめでとうございます。
ご存じの方も多いと思いますが、PowerShell v2のCTPが2007年11月に公開されています。今回は、v2で追加されたバックグラウンド ジョブに関して記述したいと思います。バックグラウンド ジョブは、文字通りバックグラウンドでコマンドを実行する機能です。この機能に関連したコマンドレットとして、以下が提供されています。

  • Start-PSJob(ジョブの追加と開始)
  • Get-PSJob(ジョブの取得)
  • Remove-PSJob(ジョブの削除)
  • Wait-PSJob(ジョブの一時停止)
  • Receive-PSJob(ジョブの実行結果の取得)

使い方は簡単で、「Start-PSJob -Command "コマンド文字列"」を実行することでバックグラウンドジョブが開始されます。Start-PSJobは、PSRemotingJobのインスタンスを返します。このPSJobのインスタンスを取得するのが、Get-PSJobコマンドレットになります。
 実行を開始したPSJobはバックグラウンドで動作しますので、結果を受け取るのに「Receive-PSJob -InputObject $PSJob」を実行します。これでコンソールに実行結果を受け取ることができます。
 PSJobが、PSRemotingJobのインスタンスである点に注意してください。何故なら、v2からPowerShell Remoting(Windows Remote Managementが必須、VistaではSP1が必須)が導入されており、リモートのコンピュータに対する操作をバックグラウンドでできるようになっているからです。それとPowerShellのコマンド実行は、Runspaceオブジェクトのインスタンスを使って実行しますので、バックグラウンドジョブはテンポラリのRunspaceオブジェクトを作成して利用しています。オプションで独自のRunspaceオブジェクト(New-Runspaceコマンドレット)を指定することもできます。
 このバックグランドジョブですが、現時点では管理者権限が必須のようです。一般ユーザー権限で実行したところ、実行が失敗するので管理者権限で試したら、正常に動作しました。

 PowerShell v2 CTPを試される場合に注意していただく点が、2つあります。1つ目は、PowerShell1.0の置き換えになることです。このためインストール前に、PowerShell 1.0をアンインストールする必要があります。最後は、ヘルプに関してです。v2 CTPは英語版のため、日本語OSではヘルプを表示することができません。このため「地域と言語」を英語に設定していただくか、$PSHome\en-USフォルダをja-JPフォルダにリネームしていただく必要があります。