PowerShell HelpFile - about_remote_jobs
 記事記号:[me1570] 初版:2011/May/10

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

トピック
    about_Remote_Jobs

簡易説明
    リモート コンピューターでバックグラウンド ジョブを実行する方法について説明し
    ます。

詳細説明
    バックグラウンド ジョブは、現在のセッションと対話することなく非同期的に実行
    されるコマンドです。すぐにコマンド プロンプトに戻り、ジョブが実行されている
    間も引き続きセッションを使用できます。

    既定では、バックグラウンド ジョブはローカル コンピューターで実行されます。
    ただし、いくつかの方法によってバックグラウンド ジョブをリモート コンピュー
    ターで実行することもできます。

    ここでは、リモート コンピューターでバックグラウンド ジョブを実行する方法に
    ついて説明します。ローカル コンピューターでバックグラウンド ジョブを実行す
    る方法については、「about_Jobs」を参照してください。バックグラウンド ジョ
    ブの詳細については、「about_Job_Details」を参照してください。


 リモート バックグラウンド ジョブ

    バックグラウンド ジョブは、次の 3 とおりの方法でリモート コンピューターで実
    行できます。

    -- リモート コンピューターとの対話型のセッションを開始し、その対話型のセッ
       ションでジョブを開始します。この場合の手順はローカル ジョブを実行する場
       合と同じですが、すべての操作はリモート コンピューターで行われます。

    -- 結果をローカル コンピューターに返すバックグラウンド ジョブをリモート コ
       ンピューターで実行します。この方法は、バックグラウンド ジョブの結果を収
       集し、ローカル コンピューターで一元管理する必要がある場合に使用します。

    -- 結果をリモート コンピューターで保持するバックグラウンド ジョブをリモート 
       コンピューターで実行します。この方法は、ジョブ データを元のコンピュータ
       ー上でより安全に管理する必要がある場合に使用します。

 対話型セッションでのバックグラウンド ジョブの開始

    リモート コンピューターとの対話型のセッションを開始し、その対話型のセッショ
    ンでバックグラウンド ジョブを開始できます。対話型のセッションの詳細について
    は、「about_Remote」および「Enter-PSSession」を参照してください。

    バックグラウンド ジョブを対話型のセッションで開始する手順は、バックグラウン
    ド ジョブをローカル コンピューターで開始する手順とほぼ同じです。ただし、操作
    はすべてローカル コンピューターではなくリモート コンピューターで行われます。


    手順 1. ENTER-PSSESSION

    Enter-PSSession コマンドレットを使用して、リモート コンピューターとの対話型
    のセッションを開始します。Enter-PSSession の ComputerName パラメーターを使用
    して、対話型のセッション用の一時接続を確立できます。また、Session パラメータ
    ーを使用して、Windows PowerShell セッション (PSSession) で対話型のセッション
    を実行することもできます。

    次のコマンドを実行すると、Server01 コンピューターで対話型のセッションが開始
    されます。
  
        C:\PS> Enter-PSSession -computername Server01

    コマンド プロンプトが変わり、Server01 コンピューターに接続していることが示さ
    れます。

        Server01\C:>


    手順 2. START-JOB

    セッションでバックグラウンド ジョブを開始するには、Start-Job コマンドレット
    を使用します。

    次のコマンドは、Server01 コンピューター上の Windows PowerShell イベント ログ
    のイベントを取得するバックグラウンド ジョブを実行します。Start-Job コマンドレ
    ットは、ジョブを表すオブジェクトを返します。

    このコマンドは、ジョブ オブジェクトを $job 変数に保存します。

        Server01\C:> $job = start-job -scriptblock {get-eventlog 
        "Windows PowerShell"}
   
    ジョブの実行中、対話型のセッションでは他のコマンドを実行できます (他のバック
    グラウンド ジョブも含む)。ただし、ジョブが完了するまで対話型のセッションを開
    いたままにしておく必要があります。セッションを終了すると、ジョブが中断され、
    結果は返されません。



    手順 3. GET-JOB

    ジョブが完了しているかどうかを確認するには、$job 変数の値を表示するか、Get-J
    ob コマンドレットを使用してジョブを取得します。次のコマンドは Get-Job コマン
    ドレットを使用してジョブを表示します。

        Server01\C:> get-job $job

        SessionId  Name  State      HasMoreData  Location   Command
        ---------  ----  -----      -----------  --------   -------
        1          Job1  Complete   True         localhost  get-eventlog "Window
                                                            s PowerShell"
   
    Get-Job の出力には、ジョブが "localhost" コンピューターで実行されたことが示さ
    れています。これは、ジョブが同じコンピューターで開始、実行されたためです (こ
    の場合は Server01)。
    


    手順 4. RECEIVE-JOB

    ジョブの結果を取得するには、Receive-Job コマンドレットを使用します。結果は、
    対話型のセッションで表示することも、リモート コンピューター上のファイルに保
    存することもできます。次のコマンドは、$job 変数内のジョブの結果を取得します。
    このコマンドはリダイレクト演算子 (>) を使用して、ジョブの結果を Server01 コ
    ンピューター上の PsLog.txt ファイルに保存します。

        Server01\C:> receive-job $job > c:\logs\PsLog.txt



    手順 5. EXIT-PSSESSION

    対話型のセッションを終了するには、Exit-PSSession コマンドレットを使用します。
    コマンド プロンプトが変わり、ローカル コンピューター上の元のセッションに戻っ
    たことが示されます。

        Server01\C:> Exit-PSSession
        C:\PS>
         


    手順 6. INVOKE-COMMAND: 内容の取得
     
    Server01 コンピューター上の PsLog.txt ファイルの内容を表示するには、別の対話
    型のセッションを開始するか、リモート コマンドを実行します。この種類のコマン
    ドは、複数のコマンドを使用して PsLog.txt ファイルのデータを調査および管理す
    る必要がある場合に、PSSession (固定接続) で実行することをお勧めします。PSSes
    sion の詳細については、「about_PSSessions」を参照してください。

    次のコマンドは、New-PSSession コマンドレットを使用して、Server01 コンピュー
    ターに接続する PSSession を作成します。また、Invoke-Command コマンドレットを
    使用し、PSSession で Get-Content コマンドを実行して、ファイルの内容を表示し
    ます。

        C:\PS> $s = new-pssession -computername Server01
        C:\PS> invoke-command -session $s -scriptblock {get-content c:\logs\pslo
        g.txt}


       
 ローカル コンピューターに結果を返すリモート ジョブの開始 (AsJob)

    コマンドの結果をローカル コンピューターに返すバックグラウンド ジョブをリモー
    ト コンピューターで開始するには、Invoke-Command などのコマンドレットの AsJob 
    パラメーターを使用します。

    AsJob パラメーターを使用した場合、ジョブはリモート コンピューターで実行されま
    すが、ジョブ オブジェクトは実際にはローカル コンピューターに作成されます。ジ
    ョブが完了すると、結果がローカル コンピューターに返されます。

    Job という名詞を含んだコマンドレット (Job コマンドレット) を使用すると、どの
    コマンドレットで作成されたジョブでも管理できます。AsJob パラメーターを持つコ
    マンドレットの多くは Windows PowerShell のリモート処理を使用しないので、リモ
    ート処理用に構成されていないコンピューターや、リモート処理の要件を満たしてい
    ないコンピューターでもこれらのコマンドレットを使用できます。
 

    手順 1. INVOKE-COMMAND -ASJOB

    次のコマンドは、Invoke-Command の AsJob パラメーターを使用して、Server01 コ
    ンピューターでバックグラウンド ジョブを開始します。ジョブは、システム ログ内
    のイベントを取得する Get-Eventlog コマンドを実行します。JobName パラメーター
    を使用して、表示名をジョブに割り当てることができます。

       invoke-command -computername Server01 -scriptblock {get-eventlog system} 
       -asjob

    コマンドの結果は次のサンプル出力のような形になります。


       SessionId   Name    State      HasMoreData     Location   Command
       ---------   ----    -----      -----------     --------   -------
       1           Job1    Running    True            Server01   get-eventlog sy
                                                                 stem

    AsJob パラメーターを使用した場合、Invoke-Command は、Start-Job が返すジョブ 
    オブジェクトと同じ種類のジョブ オブジェクトを返します。ジョブ オブジェクトを
    変数に保存することも、Get-Job コマンドを使用してジョブを取得することもできま
    す。

    Location プロパティの値は、ジョブが Server01 コンピューターで実行されたことを
    示しています。この点に注意してください。


    手順 2. GET-JOB

    Invoke-Command コマンドレットの AsJob パラメーターを使用して開始したジョブを
    管理するには、Job コマンドレットを使用します。リモート ジョブを表すジョブ オ
    ブジェクトはローカル コンピューター上にあるので、ジョブを管理するためにリモ
    ート コマンドを実行する必要はありません。

    ジョブが完了しているかどうかを確認するには、Get-Job コマンドを使用します。次
    のコマンドを実行すると、現在のセッションで開始されたすべてのジョブを取得でき
    ます。

        get-job

    リモート ジョブは現在のセッションで開始されたため、ローカル Get-Job コマンド
    によって取得されます。ジョブ オブジェクトの State プロパティは、コマンドが正
    常に完了したことを示しています。
       
       SessionId   Name   State      HasMoreData  Location   Command
       ---------   ----   -----      -----------  --------   -------
       1           Job1   Completed  True         Server01   get-eventlog system


    手順 3. RECEIVE-JOB

    ジョブの結果を取得するには、Receive-Job コマンドレットを使用します。ジョブの
    結果は、ジョブ オブジェクトが存在するコンピューターに自動的に返されるので、
    ローカル Receive-Job コマンドで結果を取得できます。

    次のコマンドは、Receive-Job コマンドレットを使用してジョブの結果を取得します。
    ジョブの識別にはセッション ID を使用しています。ジョブの結果は $results 変数
    に保存されます。結果をファイルにリダイレクトすることもできます。

       $results = receive-job -id 1
    


 リモート コンピューターで結果を保持するリモート ジョブの開始

    コマンドの結果をリモート コンピューターで保持するバックグラウンド ジョブをリ
    モート コンピューターで開始するには、Invoke-Command コマンドレットを使用して、
    Start-Job コマンドをリモート コンピューターで実行します。この方法を使用すると、
    バックグラウンド ジョブを複数のコンピューターで実行できます。

    Start-Job コマンドをリモートで実行すると、ジョブ オブジェクトがリモート コン
    ピューターに作成され、ジョブの結果がリモート コンピューターで保持されます。
    ジョブの側から見ると、操作はすべてローカルで行われます。ローカル ジョブをリモ
    ート コンピューターで管理するために、単にコマンドをリモートで実行することにな
    ります。


    手順 1. INVOKE-COMMAND START-JOB

    Invoke-Command コマンドレットを使用して、Start-Job コマンドをリモート コンピ
    ューターで実行します。

    このコマンドを使用する場合は、PSSession (固定接続) が必要です。Invoke-Comman
    d の ComputerName パラメーターを使用して一時接続を確立した場合、ジョブ オブ
    ジェクトが返されると、Invoke-Command コマンドが完了したと見なされます。その
    結果、一時接続が閉じられ、ジョブが取り消されます。
 
    次のコマンドは、New-PSSession コマンドレットを使用して、Server01 コンピュー
    ターに接続される PSSession を作成します。このコマンドは PSSession を $s 変数
    に保存します。

        $s = new-pssession -computername Server01


    次のコマンドは、Invoke-Command コマンドレットを使用して、PSSession で Start-
    Job コマンドを実行します。Start-Job コマンドと Get-Eventlog コマンドは中かっ
    こで囲みます。

       invoke-command -session $s -scriptblock {start-job 
       -scriptblock {get-eventlog system}}

    結果は次のサンプル出力のような形になります。


       Id       Name    State      HasMoreData     Location   Command
       --       ----    -----      -----------     --------   -------
       2        Job2    Running    True            Localhost  get-eventlog system

    Start-Job コマンドをリモートで実行すると、Invoke-Command は Start-Job が返す
    ジョブ オブジェクトと同じ種類のジョブ オブジェクトを返します。ジョブ オブジ
    ェクトを変数に保存することも、Get-Job コマンドを使用してジョブを取得すること
    もできます。

    ジョブは Server01 コンピューターで実行されたにもかかわらず、Location プロパ
    ティの値は、ジョブがローカル コンピューター ("LocalHost") で実行されたことを
    示しています。この点に注意してください。ジョブ オブジェクトは Server01 コン
    ピューターに作成され、ジョブも同じコンピューターで実行されるので、ローカル 
    バックグラウンド ジョブと見なされます。


    手順 2. INVOKE-COMMAND GET-JOB

    リモート バックグラウンド ジョブを管理するには、Job コマンドレットを使用しま
    す。ジョブ オブジェクトはリモート コンピューター上にあるので、ジョブの取得、
    停止、待機、結果の取得を行うには、リモート コマンドを実行する必要があります。

    ジョブが完了しているかどうかを確認するには、Invoke-Command コマンドを使用して、
    Server01 コンピューターに接続されている PSSession で Get-Job コマンドを実行し
    ます。

        invoke-command -session $s -scriptblock {get-job}

    このコマンドはジョブ オブジェクトを返します。ジョブ オブジェクトの State プ
    ロパティは、コマンドが正常に完了したことを示しています。


       SessionId       Name    State      HasMoreData     Location   Command
       ---------       ----    -----      -----------     --------   -------
       2               Job2    Completed  True            LocalHost  get-eventlo
                                                                     g system


    手順 3. INVOKE-COMMAND RECEIVE-JOB

    ジョブの結果を取得するには、Invoke-Command コマンドレットを使用して、Server0
    1 コンピューターに接続されている PSSession で Receive-Job コマンドを実行しま
    す。

    次のコマンドは、Receive-Job コマンドレットを使用してジョブの結果を取得します。
    ジョブの識別にはセッション ID を使用しています。ジョブの結果は $results 変数
    に保存されます。リモート コンピューターのジョブ キャッシュに結果を保持するた
     め、Receive-Job の Keep パラメーターを使用しています。

        $results = invoke-command -session $s -scriptblock {receive-job -session
        id 2 -keep}

    ローカル コンピューターまたはリモート コンピューター上のファイルに結果をリダ
    イレクトすることもできます。次のコマンドはリダイレクト演算子を使用して、結果
    を Server01 コンピューター上のファイルに保存します。

        invoke-command -session $s -command {receive-job -sessionid 2 > c:\logs\
        pslog.txt}


関連項目
    about_Jobs
    about_Job_Details
    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_remote_jobs
ご利用数: 1859056
感想・要望・問い合わせは こちら