PowerShell HelpFile - about_job_details
 記事記号:[me1542] 初版:2011/May/10

この文書は、Windows PowerShellのヘルプ機能で表示される内容を再構成したものです。

トピック
  about_Job_Details

簡易説明
  ローカル コンピューターおよびリモート コンピューターでのバックグラウンド ジョ
  ブの詳細について説明します。
    
詳細説明
   このトピックでは、バックグラウンド ジョブの概念、および Windows PowerShell で
   どのようにバックグラウンド ジョブが動作するかの技術情報について説明します。

   このトピックは、「about_Jobs」および「about_Remote_Jobs」を補足するものです。

   重要: Start-Job、または Invoke-Command の AsJob パラメーターを使用して開始す
         るバックグラウンド ジョブは、Windows PowerShell リモート処理インフラス
         トラクチャに依存しています。これらの機能を使用するには、バックグラウン
         ド ジョブがローカル コンピューターのみで実行される場合でも、Windows Po
         werShell がリモート処理用に構成されている必要があります。詳細について
         は、「about_Remote_Requirements」を参照してください。

 バックグラウンド ジョブについて
    バックグラウンド ジョブは、コマンドまたは式を非同期的に実行します。バックグ
    ラウンド ジョブは、コマンドレット、関数、スクリプト、またはその他のコマンド
    ベースのタスクを実行できます。バックグラウンド ジョブは、時間のかかるコマン
    ドを実行するように設計されていますが、バックグラウンド ジョブを使用すると、
    どのコマンドもバックグラウンドで実行できます。

    同期コマンドが実行されている場合、コマンドが完了するまで、Windows PowerShell 
    のコマンド プロンプトは表示されません。ただし、バックグラウンド ジョブによっ
    て Windows PowerShell プロンプトが非表示になることはありません。バックグラウ
    ンド ジョブを開始するコマンドは、ジョブ オブジェクトを返します。すぐにプロン
    プトに戻るため、バックグラウンド ジョブを実行しながら他のタスクを実行するこ
    とができます。
  
    ただし、バックグラウンド ジョブを開始すると、ジョブは直ちに実行されますが、
    その結果はすぐには得られません。返されるジョブ オブジェクトには、ジョブに関
    する有用な情報が含まれています。ただし、ジョブの結果は含まれません。ジョブの
    結果を取得するには、別のコマンドを実行する必要があります。また、ジョブの停止、
    ジョブが完了するまでの待機、およびジョブの削除を行うためのコマンドを実行する
    こともできます。

    バックグラウンド ジョブのタイミングを他のコマンドとは無関係にするために、各
    バックグラウンド ジョブは、専用の Windows PowerShell 環境 ("セッション") で
    実行されます。ただし、これはジョブを実行するためだけに作成して後で破棄する
    一時的な接続にすることも、または複数の関連のジョブまたはコマンドの実行に使
    用する永続的なセッション (PSSession) にすることもできます。

 ジョブ コマンドレットの使用
    ローカル コンピューターでバックグラウンド ジョブを開始するには、Start-Job コ
    マンドを使用します。Start-Job は、ジョブ オブジェクトを返します。Get-Job コ
    マンドレットを使用すると、ローカル コンピューターで開始されたジョブを表すオ
    ブジェクトを取得することもできます。

    ジョブの結果を取得するには、Receive-Job コマンドを使用します。ジョブが完了し
    ていない場合、Receive-Job からは一部の結果が返されます。Wait-Job コマンドレッ
    トを使用すると、セッションで開始された 1 つまたはすべてのジョブが完了するまで、
    コマンド プロンプトが表示されないようにすることもできます。

    バックグラウンド ジョブを停止するには、Stop-Job コマンドレットを使用します。
    ジョブを削除するには、Remove-Job コマンドレットを使用します。

    コマンドレットの動作の詳細については、各コマンドレットのヘルプ トピックおよ
    び「about_Jobs」を参照してください。

 
 リモート コンピューターでのバックグラウンド ジョブの開始
    ローカル コンピューターまたはリモート コンピューターで、バックグランド ジョ
    ブを作成および管理することができます。バックグラウンド ジョブをリモートで実
    行するには、Invoke-Command などのコマンドレットの AsJob パラメーターを使用す
    るか、または Invoke-Command コマンドレットを使用して Start-Job コマンドをリ
    モートで実行します。対話型のセッションでバックグラウンド ジョブを開始するこ
    ともできます。

    リモート バックグラウンド ジョブの詳細については、「about_Remote_Jobs」を参
    照してください。

 子ジョブ
    各バックグラウンド ジョブは、親ジョブと 1 つ以上の子ジョブから構成されていま
    す。Start-Job を使用して、または Invoke-Command の AsJob パラメーターを使用
    して開始されたジョブでは、親ジョブはエグゼクティブになります。この親ジョブは
    コマンドを実行せず、結果を返しません。コマンドは、実際には子ジョブによって実
    行されるためです (他のコマンドレットを使用して開始したジョブでは、異なる動作
    になることがあります)。

    子ジョブは、親ジョブ オブジェクトの ChildJobs プロパティに保存されます。Chil
    dJobs プロパティには、1 つ以上の子ジョブ オブジェクトを含めることができます。
    子ジョブ オブジェクトには、親ジョブとは違う名前、ID、およびインスタンス ID 
    があるため、親ジョブと子ジョブは個々に、またはまとめて管理することができます。

    ジョブ内の親ジョブと子ジョブを表示するには、次のコマンドに示すように、Get-Jo
    b コマンドレットを使用して親ジョブを取得し、次にこのジョブをパイプを介して F
    ormat-List コマンドに渡します。これにより、オブジェクトの Name プロパティお
    よび ChildJobs プロパティが表示されます。

        C:\PS> get-job | format-list -property Name, ChildJobs

        Name          : Job1
        ChildJobs     : {Job2}

    次のコマンドに示すように、子ジョブに Get-Job コマンドを使用することもできま
    す。

        C:\PS> get-job job2

        Id    Name   State      HasMoreData   Location    Command
        --    ----   -----      -----------   --------    -------
        2     Job2   Completed  True          localhost   get-process

    子ジョブの構成は、ジョブの開始に使用するコマンドによって異なります。

       -- ローカル コンピューターで Start-Job を使用してジョブを開始する場合、ジ
          ョブは、エグゼクティブである親ジョブと、コマンドを実行する子ジョブから
          構成されます。

       -- 1 台以上のコンピューターで Invoke-Command の AsJob パラメーターを使用
          してジョブを開始する場合、ジョブは、コンピューターごとに実行されるジョ
          ブごとに、エグゼクティブである親ジョブと子ジョブから構成されます。

       -- 1 台以上のリモート コンピューターで Invoke-Command を使用して Start-Jo
          b コマンドを実行する場合、結果は、各リモート コンピューターでローカル 
          コマンドを実行した場合と同じになります。このコマンドは、コンピューター
          ごとにジョブ オブジェクトを返します。ジョブ オブジェクトは、エグゼクテ
          ィブ親ジョブと、コマンドを実行する 1 つの子ジョブから構成されます。
    
    親ジョブは、すべての子ジョブを表しています。親ジョブを管理すると、関連する子
    ジョブも管理することになります。たとえば、親ジョブを停止すると、すべての子ジ
    ョブも停止します。親ジョブの結果を取得すると、すべての子ジョブの結果も取得さ
    れます。

    ただし、子ジョブは個々に管理することもできます。この方法が最も便利なのは、ジ
    ョブに関する問題を調べる場合、または Invoke-Command の AsJob パラメーターを
    使用して開始した多くの子ジョブのうち 1 つのみの結果を取得する場合です (バッ
    ククォート文字 (`) は連結文字です)。

    次のコマンドは、Invoke-Command の AsJob パラメーターを使用して、ローカル コ
    ンピューターおよび 2 台のリモート コンピューターでバックグラウンド ジョブを
    開始します。このコマンドは、ジョブを $j 変数に保存します。

        C:\PS> $j = invoke-command -computername localhost, Server01, Server02 `
               -command {get-date} -AsJob

    $j 内のジョブの Name プロパティおよび ChildJob プロパティを表示すると、コマ
    ンドによってコンピューターごとに、ジョブ オブジェクトと 3 つの子ジョブが返さ
    れたことが示されます。

        C:\PS> $j | format-list name, childjobs

        Name      : Job3
        ChildJobs : {Job4, Job5, Job6}

    親ジョブを表示すると、ジョブが失敗したことが示されます。

        C:\PS> $j

        Id   Name    State   HasMoreData     Location             Command
        --   ----    -----   -----------     --------             -------
        1    Job3    Failed  True            localhost,server... get-date


    ただし、子ジョブごとに Get-Job コマンドを実行すると、1 つの子ジョブのみが失
    敗したことが示されます。

        PS C:\ps-test> get-job job4, job5, job6

        Id   Name   State      HasMoreData     Location           Command
        --   ----   -----      -----------     --------           -------
        4    Job4   Completed  True            localhost          get-date
        5    Job5   Failed     False           Server01           get-date
        6    Job6   Completed  True            Server02           get-date
    
    すべての子ジョブの結果を取得するには、Receive-Job コマンドレットを使用して親
    ジョブの結果を取得します。ただし、次のコマンドに示すように、特定の子ジョブの
    結果を取得することもできます。

        C:\PS> receive-job -job6 -keep | format-table ComputerName, DateTime -auto

        ComputerName DateTime
        ------------ --------
        Server02     Thursday, March 13, 2008 4:16:03 PM

    Windows PowerShell バックグラウンド ジョブの子ジョブの機能によって、実行する
    ジョブをさらに詳細に制御することができます。

関連項目
    about_Jobs
    about_Remote_Jobs
    about_Remote
    Invoke-Command
    Start-Job
    Get-Job
    Wait-Job
    Stop-Job
    Remove-Job
    New-PSSession
    Enter-PSSession
    Exit-PSSession
	
記事で解説しているパソコンの環境
 基本ソフト: Windows 7
 キーワード: Windows PowerShell、ヘルプ、HelpFile、about_job_details
ご利用数: 1859032
感想・要望・問い合わせは こちら