ja-JP/about_Jobs.help.txt
|
TOPIC about_Jobs 簡単な説明 PowerShell でコマンドをバックグラウンドで実行するジョブの仕組みに ついて説明します。 詳細な説明 PowerShell はコマンドを同時に実行するために、ジョブという仕組みを 提供します。ジョブを使うと、長時間かかるコマンドをバックグラウンドで 実行し、その間もコマンドプロンプトを使い続けることができます。 PowerShell には次の 3 種類のジョブがあります。 RemoteJob コマンドをリモートセッションで実行します。 BackgroundJob コマンドをローカルの別プロセスで実行します。 PSTaskJob / ThreadJob コマンドを同じプロセス内の別スレッドで実行します。 リモートジョブとバックグラウンドジョブはプロセスが分離されるため 堅牢ですが、データのシリアル化に伴うオーバーヘッドがあります。 スレッドベースのジョブはオーバーヘッドが少なく高速ですが、堅牢性は 劣ります。1 つのジョブでプロセスをクラッシュさせる重大なエラーが発生 すると、同じプロセス内のほかのジョブもすべて終了します。 ジョブ用コマンドレット コマンドレット 説明 -------------- ---- Start-Job ローカルコンピューターでバックグラウンドジョブを 開始します。 Get-Job 現在のセッションで開始したジョブを取得します。 Receive-Job ジョブの結果を取得します。 Stop-Job ジョブを停止します。 Wait-Job ジョブが完了するまでプロンプトを抑制します。 Remove-Job ジョブを削除します。 Invoke-Command -AsJob パラメーターでリモートジョブを作成します。 ローカルコンピューターでジョブを開始する Start-Job に -ScriptBlock パラメーターでスクリプトブロックを渡して ジョブを開始します。コマンドプロンプトはすぐに戻ります。 $job = Start-Job -ScriptBlock { Get-Process } PowerShell 6.0 以降では、バックグラウンド演算子(&)でも同じことが できます。 $job = Get-Process & ジョブオブジェクトのプロパティ ジョブオブジェクトには次のプロパティがあります。 Id 現在のセッション内でジョブを識別する番号 Name ジョブの名前(既定では Job1、Job2 ...) PSJobTypeName ジョブの種類(BackgroundJob、RemoteJob など) State ジョブの状態 HasMoreData 未取得の結果があるかどうか Location ジョブが実行された場所 Command ジョブが実行したコマンド State プロパティには次のような値があります。 Completed(完了)、Failed(失敗)、Blocked(ブロック)、 Running(実行中) ジョブオブジェクトを取得する Get-Job コマンドレットは、現在のセッションで開始したすべてのジョブを 取得します。 Get-Job ジョブの結果を取得する Receive-Job コマンドレットはジョブの結果を取得します。 $results = Receive-Job -Job $job 既定では、取得した結果はキャッシュから削除されます。-Keep パラメーターを 使うと、結果をキャッシュに残し、複数回取得できます。 $results = Receive-Job -Job $job -Keep ジョブの完了を待つ Wait-Job コマンドレットは、ジョブが完了するまでプロンプトを抑制します。 -Timeout パラメーターで待機時間の上限を秒単位で指定できます。 Wait-Job -Id 10 -Timeout 120 Receive-Job の -Wait パラメーターでも、完了まで待ってから結果を 取得できます。 ジョブの失敗を調べる ジョブが失敗した場合は、子ジョブの Reason プロパティで詳細を 確認できます。 $job.ChildJobs[0].JobStateInfo.Reason 関連項目 about_Job_Details about_Remote_Jobs about_Thread_Jobs Start-Job Get-Job Receive-Job Wait-Job Stop-Job Remove-Job Invoke-Command Start-ThreadJob ---- 原文: PowerShell-Docs (CC BY 4.0) の翻訳 / PSHelpJaJP |