次の方法で共有


バックグラウンド ジョブ

コマンドレットは、内部的に、または Windows PowerShellバックグラウンド ジョブとしてアクションを実行できます。 コマンドレットがバックグラウンド ジョブとして実行されると、コマンドレットが使用しているパイプライン スレッドとは別の独自のスレッドで、処理が非同期的に実行されます。 ユーザーの観点から見ると、コマンドレットがバックグラウンド ジョブとして実行されると、ジョブの完了に長時間かかる場合でもコマンド プロンプトは直ちに戻り、ジョブの実行中は中断することなく続行できます。

バックグラウンド ジョブ、子ジョブ、およびジョブ リポジトリ

バックグラウンド ジョブをサポートするコマンドレットによって返されるジョブ オブジェクトによってジョブが定義されます。 (Start-Job コマンドレットは、ジョブ オブジェクトも返します)。この定義には、ジョブの名前、ジョブの指定に使用される識別子、状態情報、および子ジョブが含まれます。 ジョブは、どの作業も実行しません。 子ジョブが実際の作業を実行するため、各バックグラウンド ジョブには少なくとも 1 つの子ジョブがあります。 バックグラウンド ジョブとして作業が実行されるようにコマンドレットを実行する場合、コマンドレットはジョブと子ジョブを共通リポジトリ (ジョブ リポジトリと呼ばれます) に追加する必要があります。

コマンド ラインでのバックグラウンド ジョブの処理方法の詳細については、次を参照してください。

バックグラウンド ジョブとして実行されるコマンドレットの記述

バックグラウンド ジョブとして実行できるコマンドレットを作成するには、次のタスクを完了する必要があります。

  • ユーザーがコマンドレットをバックグラウンド ジョブとして実行するかどうかを決定できるように、asJob スイッチ パラメーターを定義します。

  • System.Management.Automation.Job クラスから派生するオブジェクトを作成します。 このオブジェクトには、カスタム ジョブ オブジェクトまたは Windows PowerShell によって提供されるジョブ オブジェクト (System.Management.Automation.PSEventJob オブジェクトなど) を指定できます。

  • レコード処理メソッドで、コマンドレットをバックグラウンド ジョブとして実行する必要があるかどうかを検出する if ステートメントを追加します。

  • カスタム ジョブ オブジェクトの場合は、ジョブ クラスを実装します。

  • コマンドレットがバックグラウンド ジョブとして実行されるかどうかに応じて、適切なオブジェクトを返します。

コード例については、「ジョブをサポートする方法」を参照してください。

バックグラウンド ジョブを管理するために、Windows PowerShell では次の API が提供されています。

System.Management.Automation.Job カスタム ジョブ オブジェクトを派生させます。 これは抽象クラスです。

System.Management.Automation.JobRepository 現在アクティブなバックグラウンド ジョブに関する情報を管理および提供します。

System.Management.Automation.JobState バックグラウンド ジョブの状態を定義します。 状態には、開始、実行中、および停止が含まれます。

System.Management.Automation.JobStateInfo バックグラウンド ジョブの状態に関する情報を提供し、最後の状態の変更がエラーによって発生した場合、ジョブが現在の状態になった理由を示します。

System.Management.Automation.JobStateEventArgs バックグラウンド ジョブの状態が変化したときに発生するイベントの引数を提供します。

Windows PowerShell ジョブ コマンドレット

次のコマンドレットは、バックグラウンド ジョブを管理するために Windows PowerShell によって提供されます。

Get-Job

現在のセッションで実行されている Windows PowerShell バックグラウンド ジョブを取得します。

Receive-Job

現在のセッションの Windows PowerShell バックグラウンド ジョブの結果を取得します。

Remove-Job

Windows PowerShell バックグラウンド ジョブを削除します。

Start-Job

Windows PowerShell バックグラウンド ジョブを開始します。

Stop-Job

Windows PowerShell バックグラウンド ジョブを停止します。

Wait-Job

セッションで実行されている Windows PowerShell バックグラウンド ジョブの 1 つ以上が完了するまで、コマンド プロンプトを非表示にします。

こちらもご覧ください

Windows PowerShell コマンドレット の作成