항목
    about_Remote_Jobs

간단한 설명
    원격 컴퓨터에서 백그라운드 작업을 실행하는 방법에 대해 설명합니다.

자세한 설명
    백그라운드 작업은 현재 세션과 상호 작용하지 않고 비동기적으로 실행되는 명령입니다. 명령 프롬프트가 즉시
    반환되고 작업이 실행되는 동안 세션을 계속 사용할 수 있습니다.

    기본적으로 백그라운드 작업은 로컬 컴퓨터에서 실행됩니다. 그러나 몇 가지 절차를 사용하여 원격 컴퓨터에서 
    백그라운드 작업을 실행할 수 있습니다. 

    이 항목에서는 원격 컴퓨터에서 백그라운드 작업을 실행하는 방법에 대해 설명합니다. 로컬 컴퓨터에서 
    백그라운드 작업을 실행하는 방법에 대한 자세한 내용은 about_Jobs를 참조하십시오. 백그라운드 작업에 
    대한 자세한 내용은 about_Job_Details를 참조하십시오.


 원격 백그라운드 작업

    몇 가지 방법을 사용하여 원격 컴퓨터에서 백그라운드 작업을 실행할 수 있습니다. 

     -- 원격 컴퓨터와 대화형 세션을 시작하고 대화형 세션에서 작업을 시작합니다. 절차는 로컬 작업 실행과
        동일하지만 모든 작업이 원격 컴퓨터에서 수행됩니다.

     -- 결과를 로컬 컴퓨터로 반환하는 백그라운드 작업을 원격 컴퓨터에서 실행합니다. 백그라운드 작업의 
        결과를 수집하여 로컬 컴퓨터의 중앙 위치에서 유지 관리하려는 경우 이 방법을 사용합니다.

     -- 원격 컴퓨터에서 결과를 유지 관리하는 백그라운드 작업을 원격 컴퓨터에서 실행합니다. 작업 데이터가
        원래 컴퓨터에서 더욱 안전하게 유지 관리되는 경우 이 방법을 사용합니다.  

 대화형 세션에서 백그라운드 작업 시작

    원격 컴퓨터와 대화형 세션을 시작한 다음 대화형 세션 중에 백그라운드 작업을 시작할 수 있습니다. 대화형
    세션에 대한 자세한 내용은 about_Remote 및 Enter-PSSession을 참조하십시오.

    대화형 세션에서 백그라운드 작업을 시작하는 절차는 로컬 컴퓨터에서 백그라운드 작업을 시작하는 절차와 거의 
    동일합니다. 그러나 모든 작업은 로컬 컴퓨터가 아니라 원격 컴퓨터에서 발생합니다.


    1단계: ENTER-PSSESSION

    원격 컴퓨터와 대화형 세션을 시작하려면 Enter-PSSession cmdlet을 사용합니다. Enter-PSSession의 
    ComputerName 매개 변수를 사용하여 대화형 세션에 대한 임시 연결을 설정할 수 있습니다. 또는 Session 
    매개 변수를 사용하여 Windows PowerShell 세션(PSSession)에서 대화형 세션을 실행할 수 있습니다. 

    다음 명령은 Server01 컴퓨터에서 대화형 세션을 시작합니다.
  
        C:\PS> Enter-PSSession -computername Server01

    명령 프롬프트가 변경되어 이제 Server01 컴퓨터에 연결되어 있음을 나타냅니다.

        Server01\C:>


    2단계: START-JOB

    세션에서 백그라운드 작업을 시작하려면 Start-Job cmdlet을 사용합니다.

    다음 명령은 Server01 컴퓨터의 Windows PowerShell 이벤트 로그에서 이벤트를 가져오는 백그라운드
    작업을 실행합니다. Start-Job cmdlet은 작업을 나타내는 개체를 반환합니다. 

    이 명령은 작업 개체를 $job 변수에 저장합니다. 

        Server01\C:> $job = start-job -scriptblock {get-eventlog "Windows PowerShell"}
   
    작업이 실행되는 동안 대화형 세션을 사용하여 다른 백그라운드 작업을 비롯하여 다른 명령을 실행할 수
    있습니다. 그러나 작업이 완료될 때까지 대화형 세션을 열어 두어야 합니다. 세션을 종료하는 경우 작업이
    중단되고 결과가 손실됩니다.



    3단계: GET-JOB

    작업이 완료되었는지 확인하려면 $job 변수의 값을 표시하거나 Get-Job cmdlet을 사용하여 작업을 가져옵니다.
    다음 명령은 Get-Job cmdlet을 사용하여 작업을 표시합니다.

        Server01\C:> get-job $job

        SessionId  Name  State      HasMoreData  Location   Command
        ---------  ----  -----      -----------  --------   -------
        1          Job1  Complete   True         localhost  get-eventlog "Windows PowerShell"
   
    Get-Job 출력에서는 작업이 동일한 컴퓨터(이 경우 Server01)에서 시작되어 실행되고 있기 때문에 작업이 
    "localhost" 컴퓨터에서 실행되고 있음을 보여 줍니다.
    


    4단계: RECEIVE-JOB

    작업의 결과를 가져오려면 Receive-Job cmdlet을 사용합니다. 결과를 대화형 세션에서 표시하거나 원격 
    컴퓨터의 파일에 저장할 수 있습니다. 다음 명령은 $job 변수에 있는 작업의 결과를 가져옵니다. 이 명령은 
    리디렉션 연산자(>)를 사용하여 작업의 결과를 Server01 컴퓨터의 PsLog.txt 파일에 저장합니다.

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



    5단계: EXIT-PSSESSION

    대화형 세션을 종료하려면 Exit-PSSession cmdlet을 사용합니다. 명령 프롬프트가 변경되어
    로컬 컴퓨터의 원래 세션에 돌아와 있음을 나타냅니다.

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


    6단계: INVOKE-COMMAND: GET CONTENT
     
    Server01 컴퓨터에서 PsLog.txt 파일의 내용을 보려면 다른 대화형 세션을 시작하거나 원격 
    명령을 실행합니다. 이러한 종류의 명령은 몇 가지 명령을 사용하여 PsLog.txt 파일에서 데이터를 
    조사하고 관리하려는 경우 PSSession(영구 연결)에서 가장 효과적으로 실행됩니다. PSSession에 
    대한 자세한 내용은 about_PSSessions를 참조하십시오.

    다음 명령은 New-PSSession cmdlet을 사용하여 Server01 컴퓨터에 연결된 PSSession을 만들고,
    Invoke-Command cmdlet을 사용하여 PSSession에서 Get-Content 명령을 실행하여 파일의 
    내용을 표시합니다.

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


       
 결과를 로컬 컴퓨터에 반환하는 원격 작업 시작(AsJob)

    명령 결과를 로컬 컴퓨터에 반환하는 백그라운드 작업을 원격 컴퓨터에서 시작하려면 Invoke-Command cmdlet과
    같은 cmdlet의 AsJob 매개 변수를 사용합니다. 

    AsJob 매개 변수를 사용하는 경우 작업이 원격 컴퓨터에서 실행되는 경우에도 작업 개체가 로컬 컴퓨터에서 실제로 
    만들어집니다. 작업이 완료되면 결과가 로컬 컴퓨터로 반환됩니다. 

    명사 Job이 포함된 cmdlet(Job cmdlet)을 사용하여 모든 cmdlet을 통해 만들어진 모든 작업을 관리할 수 있습니다. 
    AsJob 매개 변수가 있는 많은 cmdlet은 Windows PowerShell 원격을 사용하지 않으므로 원격 기능을 사용하도록 
    구성되지 않고 원격 기능에 대한 요구 사항을 충족하지 않는 컴퓨터에서도 이러한 cmdlet을 사용할 수 있습니다.
 

    1단계: INVOKE-COMMAND -ASJOB

    다음 명령은 Invoke-Command의 AsJob 매개 변수를 사용하여 Server01 컴퓨터에서 백그라운드 작업을 
    시작합니다. 이 작업은 System log에서 이벤트를 가져오는 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 system

    AsJob 매개 변수가 사용되는 경우 Invoke-Command는 Start-Job이 반환하는 동일한 형식의 작업 개체를 
    반환합니다. 작업 개체를 변수에 저장하거나 Get-Job 명령을 사용하여 작업을 가져올 수 있습니다.

    Location 속성의 값은 작업이 Server01 컴퓨터에서 실행되었음을 보여 줍니다.  


    2단계: GET-JOB

    Invoke-Command cmdlet의 AsJob 매개 변수를 사용하여 시작된 작업을 관리하려면 Job cmdlet을 사용합니다. 
    원격 작업을 나타내는 작업 개체가 로컬 컴퓨터에 있기 때문에 원격 명령을 실행하여 작업을 관리할 
    필요가 없습니다.  

    작업이 완료되었는지 확인하려면 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 cmdlet을 사용합니다. 작업 결과가 자동으로 작업 개체가 있는 
    컴퓨터로 반환되기 때문에 로컬 Receive-Job 명령을 사용하여 결과를 가져올 수 있습니다.

    다음 명령은 Receive-Job cmdlet을 사용하여 작업의 결과를 가져옵니다. 이 명령은 세션 ID를 사용하여
    작업을 식별하며, 작업 결과를 $results 변수에 저장합니다. 또한 결과를 파일로 리디렉션할 수도 있습니다.

       $results = receive-job -id 1
    


 원격 컴퓨터에서 결과를 보관하는 원격 작업 시작

    원격 컴퓨터에서 명령 결과를 보관하는 백그라운드 작업을 원격 컴퓨터에서 시작하려면 Invoke-Command cmdlet을 
    사용하여 원격 컴퓨터에서 Start-Job 명령을 실행합니다. 이 방법을 사용하여 여러 컴퓨터에서 백그라운드 작업을 
    실행할 수 있습니다.

    Start-Job 명령을 원격으로 실행하면 작업 개체가 원격 컴퓨터에서 만들어지고 작업 결과가 원격 컴퓨터에서 
    유지 관리됩니다. 이 작업의 관점에서 해당하는 모든 작업은 로컬입니다. 사용자는 원격으로 명령을 실행하여
    원격 컴퓨터에서 로컬 작업을 관리합니다.


    1단계: INVOKE-COMMAND START-JOB

    Invoke-Command cmdlet을 사용하여 원격 컴퓨터에서 Start-Job 명령을 실행합니다. 

    이 명령에는 PSSession(영구 연결)이 필요합니다. Invoke-Command의 ComputerName 매개 변수를 
    사용하여 임시 연결을 설정하는 경우 Invoke-Command 명령은 작업 개체가 반환될 때 완료된
    것으로 간주됩니다. 따라서 임시 연결이 닫히고 작업이 취소됩니다.
 
    다음 명령은 New-PSSession cmdlet을 사용하여 Server01 컴퓨터에 연결된 PSSession을 만듭니다.
    이 명령은 PSSession을 $s 변수에 저장합니다.

        $s = new-pssession -computername Server01


    다음 명령은 Invoke-Command cmdlet을 사용하여 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 명령을 사용하여 작업을 가져올 수 있습니다.

    Location 속성의 값은 작업이 Server01 컴퓨터에서 실행된 경우에도 작업이 로컬 컴퓨터("LocalHost")에서 
    실행되었음을 보여 줍니다. 작업 개체가 Server01 컴퓨터에서 만들어지고 작업이 동일한 컴퓨터에서 실행되기
    때문에 작업은 로컬 백그라운드 작업으로 간주됩니다.  


    2단계: INVOKE-COMMAND GET-JOB

    원격 백그라운드 작업을 관리하려면 Job cmdlet을 사용합니다. 작업 개체가 원격 컴퓨터에 있기 때문에 원격 
    명령을 실행하여 작업 결과를 가져오고, 중지하고, 기다리고, 검색해야 합니다.  

    작업이 완료되었는지 확인하려면 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-eventlog system


    3단계: INVOKE-COMMAND RECEIVE-JOB

    작업의 결과를 가져오려면 Invoke-Command cmdlet을 사용하여 Server01 컴퓨터에 연결된 PSSession에서 
    Receive-Job 명령을 실행합니다.

    다음 명령은 Receive-Job cmdlet을 사용하여 작업의 결과를 가져옵니다. 이 명령은 세션 ID를 사용하여 작업을 
    식별하며, 작업 결과를 $results 변수에 저장합니다. 또한 Receive-Job의 Keep 매개 변수를 사용하여 원격 
    컴퓨터의 작업 캐시에 결과를 보관합니다.

        $results = invoke-command -session $s -scriptblock {receive-job -sessionid 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




목차