항목
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
--------- ---- ----- ----------- -------- -------
3 Job3 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