about_Remote_Jobs

업데이트 날짜: 2014년 5월

적용 대상: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

항목

about_Remote_Jobs

간단한 설명

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

자세한 설명

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

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

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

원격 백그라운드 작업

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

-- 원격 컴퓨터에서 대화형 세션을 시작하고 대화형 세션에서 작업을 시작합니다. 모든 작업은 원격 컴퓨터에서 수행되지만 절차는 로컬 작업을 실행하는 것과 같습니다.

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

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

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

원격 컴퓨터에서 대화형 세션을 시작하고 대화형 세션 중에 백그라운드 작업을 시작할 수 있습니다. 대화형 세션에 대한 자세한 내용은 about_Remote 및 see 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"

작업이 시작되었고 같은 컴퓨터(이 경우 Server01)에서 실행되고 있으므로 Get-Job 출력은 작업이 "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 명사(Job cmdlet)가 포함된 cmdlet을 사용하여 cmdlet에서 생성된 작업을 관리할 수 있습니다. AsJob 매개 변수가 포함된 대부분 cmdlet에서는 Windows PowerShell 원격을 사용하지 않으므로 원격용으로 구성되지 않고 원격 요구 사항을 충족하지 않는 컴퓨터에서도 해당 cmdlet을 사용할 수 있습니다.

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 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

about_Remote_Variables

Invoke-Command

Start-Job

Get-Job

Wait-Job

Stop-Job

Remove-Job

New-PSSession

Enter-PSSession

Exit-PSSession