about_Job_Details
업데이트 날짜: 2014년 5월
적용 대상: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0
항목
about_Job_Details
간단한 설명
로컬 및 원격 컴퓨터에서 백그라운드 작업에 대한 세부 정보를 제공합니다.
자세한 설명
이 항목에서는 백그라운드 작업의 개념을 설명하고 Windows PowerShell®에서 백그라운드 작업이 실행되는 방식에 대한 기술적인 정보를 제공합니다.
이 항목은 about_Jobs and about_Remote_Jobs 항목의 추가 내용입니다.
백그라운드 작업 정보
백그라운드 작업은 명령 또는 식을 비동기적으로 수행합니다. cmdlet, 함수, 스크립트 또는 기타 명령 기반 작업을 실행하기도 합니다. 장시간 소요되는 명령을 실행하기 위한 것이지만, 백그라운드에서 명령을 실행하기 위해 사용할 수 있습니다.
비동기 명령을 실행하면 Windows PowerShell 명령 프롬프트는 명령이 완료될 때가지 표시되지 않습니다. 그러나 백그라운드 작업은 Windows PowerShell 프롬프트를 표시하지 않도록 하지는 않습니다. 백그라운드 작업을 시작하는 명령은 작업 개체를 반환합니다. 백그라운드 작업이 실행되는 동안 다른 작업을 수행할 수 있도록 프롬프트를 즉시 반환합니다.
그러나 백그라운드 작업을 시작할 때 작업이 매우 빨리 실행되더라도 즉시 결과를 볼 수 없습니다. 반환된 작업 개체에는 작업에 대한 유용한 정보가 포함되어 있지만 작업 결과는 포함되어 있지 않습니다. 별도의 명령을 실행하여 작업 결과를 가져와야 합니다. 명령을 실행하여 작업을 중지하거나 작업이 완료되도록 기다리거나 작업을 삭제할 수도 있습니다.
다른 명령과는 별개로 백그라운드 작업의 타이밍을 지정하려면, 해당 Windows PowerShell 환경("세션")에서 각 백그라운드 작업을 실행하도록 합니다. 그러나 이는 작업을 실행하기 위해 생성되었다 폐기되는 일시적인 연결이 될 수도 있고, 몇 가지 관련 작업 또는 명령을 실행하는 데 사용할 수 있는 영구적인 세션(PSSession)일 수도 있습니다.
작업 CMDLET 사용
Start-Job 명령을 사용하여 로컬 컴퓨터에서 백그라운드 작업을 시작합니다. Start-Job은 작업 개체를 반환합니다. 또한 Get-Job cmdlet을 사용하여 로컬 컴퓨터에서 시작된 작업을 나타내는 개체를 가져올 수 있습니다.
작업 결과를 가져오려면 Receive-Job 명령을 사용합니다. 작업이 완료되면 Receive-Job은 일부 결과를 반환합니다. Wait-Job cmdlet를 사용하여 세션에서 실행 중인 작업 중 하나 또는 모두가 완료될 때까지 명령 프롬프트를 표시하지 않을 수 있습니다.
백그라운드 작업을 중지하려면 Stop-Job cmdlet을 사용합니다. 작업을 삭제하려면 Remove-Job cmdlet을 사용합니다.
cmdlet 작동 방식에 대한 자세한 내용은 각 cmdlet의 도움말 항목과 about_Jobs를 참조하세요.
원격 컴퓨터에서 백그라운드 작업 시작
로컬 또는 원격 컴퓨터에서 백그라운드 작업을 생성하고 관리할 수 있습니다. 백그라운드 작업을 원격으로 실행하려면 Invoke-Command와 같은 cmdlet의 AsJob 매개 변수를 사용하거나 Invoke-Command cmdlet을 사용하여 Start-Job 명령을 원격으로 실행합니다. 또한 대화형 세션에서 백그라운드 작업을 시작할 수도 있습니다.
원격 백그라운드 작업에 대한 자세한 내용은 about_Remote_Jobs를 참조하세요.
CHILD JOBS
각각의 백그라운드 작업은 부모 작업과 하나 이상의 자식 작업으로 구성됩니다. Start-Job 또는 Invoke-Command의 AsJob 매개 변수를 사용하여 시작된 작업에서는 부모 작업이 최고 수준입니다. 이는 어떠한 명령도 실행하거나 결과도 반환하지 않습니다. 명령은 실제로 자식 작업에 의해 실행됩니다. (다른 cmdlet을 사용하여 시작된 작업은 다르게 작동할 수 있습니다.)
자식 작업은 부모 작업 개체의 ChildJobs 속성에 저장됩니다. ChildJobs 속성은 하나 또는 많은 자식 작업 개체를 포함할 수 있습니다. 자식 작업 개체에는 부모 작업과 다른 이름, ID, 인스턴스 ID가 있으므로, 부모와 자식 작업을 별도로 또는 하나의 단위로 관리할 수 있습니다.
한 작업의 부모와 자식 작업을 가져오려면 Get-Job cmdlet의 IncludeChildJobs 매개 변수를 사용합니다. IncludeChildJob 매개 변수는 Windows PowerShell 3.0에 도입되었습니다.
C:\PS> Get-Job -IncludeChildJob
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 RemoteJob Failed True localhost Get-Process
2 Job2 Completed True Server01 Get-Process
3 Job3 Failed False localhost Get-Process
부모 작업과 특정 상태 값을 가진 자식 작업을 가져오려면 Get-Job cmdlet의 ChildJobState 매개 변수를 사용합니다. ChildJobState 매개 변수는 Windows PowerShell 3.0에 도입되었습니다.
C:\PS> Get-Job -ChildJobState Failed
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
1 Job1 RemoteJob Failed True localhost Get-Process
3 Job3 Failed False localhost Get-Process
Windows PowerShell의 모든 버전에서 한 작업의 자식 작업을 가져오려면 부모 작업의 ChildJob 속성을 사용합니다.
C:\PS> (Get-Job Job1).ChildJobs
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 Job2 Completed True Server01 Get-Process
3 Job3 Failed False localhost Get-Process
다음 명령에 나와 있는 것처럼 자식 작업에서 Get-Job 명령을 사용할 수도 있습니다.
C:\PS> Get-Job Job3
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
3 Job3 Failed False localhost Get-Process
자식 작업의 구성은 작업 시작에 사용하는 명령에 따라 다릅니다.
로컬 컴퓨터에서 Start-Job을 사용하여 작업을 시작하는 경우, 작업은 최고 수준의 부모 작업과 명령을 실행하는 자식 작업으로 구성됩니다.
한 대 이상의 컴퓨터에서 Invoke-Command의 AsJob 매개 변수를 사용하는 경우, 작업은 각 컴퓨터에서 실행되는 각 작업에 대한 최고 수준의 부모 작업과 자식 작업으로 구성됩니다.
한 대 이상의 컴퓨터에서 Invoke-Command을 사용하여 Start-Job 명령을 실행하는 경우, 그 결과는 각 원격 컴퓨터에서 실행되는 로컬 명령과 동일합니다. 명령은 각 컴퓨터에 대한 작업 개체를 반환합니다. 작업 개체는 최고 수준의 부모 작업과 명령을 수행하는 하나의 자식 작업으로 구성됩니다.
부모 작업은 모든 자식 작업을 대표합니다. 부모 작업을 관리하면 관련된 자식 작업도 관리됩니다. 예를 들어, 부모 작업을 중지하면 모든 자식 작업도 중지됩니다. 부모 작업의 결과를 가져오면 모든 자식 작업의 결과도 가져옵니다.
그러나 자식 작업은 개별적으로 관리할 수 있습니다. 이는 작업에 문제를 조사하려는 경우 또는 Invoke-Command의 AsJob 매개 변수를 사용하여 시작된 많은 자식 작업 중 하나의 결과만 가져오려는 경우 매우 유용합니다. (억음기호 문자[`]는 연속 문자입니다.)
다음 명령은 Invoke-Command의 AsJob 매개 변수를 사용하여 로컬 컴퓨터와 두 대의 원격 컴퓨터에서 백그라운드 작업을 시작합니다. 이 명령은 작업을 $j 변수에 저장합니다.
PS C:> $j = Invoke-Command -ComputerName localhost, Server01, Server02 `
-Command {Get-Date} -AsJob
$j에 작업의 Name 및 ChildJob 속성을 표시하면, 각 컴퓨터에 하나씩 세 개의 자식 작업을 가진 작업 개체가 반환되었음을 보여줍니다.
CPS C:> $j | Format-List Name, ChildJobs
Name : Job3
ChildJobs : {Job4, Job5, Job6}
부모 작업을 표시하면, 작업이 실패했음을 보여줍니다.
C:\PS> $j
Id Name PSJobTypeName State HasMoreData Location
-- ---- ------------- ----- ----------- --------
3 Job3 RemotingJob Failed False localhost,Server...
그러나 자식 작업을 가져오는 Get-Job 명령을 실행하면, 하나의 자식 작업만 실패했음을 보여줍니다.
PS C:\> Get-Job -IncludeChildJobs
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
3 Job3 RemotingJob Failed False localhost,Server...
4 Job4 Completed True localhost Get-Date
5 Job5 Failed False Server01 Get-Date
6 Job6 Completed True Server02 Get-Date
모든 자식 작업의 작업 결과를 가져오려면 Receive-Job cmdlet을 사용하여 부모 작업의 결과를 가져옵니다. 그러나 다음 명령에 나와 있는 것처럼 특정 자식 작업의 결과를 가져올 수도 있습니다.
C:\PS> Receive-Job -Name Job6 -Keep | Format-Table ComputerName, DateTime -Auto
ComputerName DateTime
------------ --------
Server02 Thursday, March 13, 2008 4:16:03 PM
Windows PowerShell 백그라운드 작업의 자식 작업 기능은 실행한 작업에 대해 더 많은 제어 권한을 제공합니다.
작업 유형
Windows PowerShell은(는) 다양한 태스크에 다양한 유형의 작업을 지원합니다. Windows PowerShell 3.0부터 개발자는 새로운 작업 유형을 Windows PowerShell에 추가하고 모듈에 작업 소스 어댑터를 포함시키는 "작업 소스 어댑터"를 쓸 수 있습니다. 모듈을 가져올 때 세션에서 새로운 작업 유형을 사용할 수 있습니다.
예를 들어, PSScheduledJob 모듈은 예정된 작업을 추가하고 PSWorkflow 모듈은 워크플로 작업을 추가합니다.
사용자 지정 작업 유형은 표준 Windows PowerShell 백그라운든 작업과 상당히 다를 수 있습니다. 예를 들어, 예정된 작업은 디스크에 저장되고, 특정 세션에서는 존재하지 않습니다. 워크플로 작업을 중단했다가 재개할 수 있습니다.
사용자 지정 작업을 관리하는 데 사용하는 cmdlet은 작업 유형에 따라 다릅니다. 일부의 경우 Get-Job 및 Start-Job과 같은 표준 작업 cmdlet을 사용할 수 있습니다. 다른 경우는 특수 작업 유형만 관리하는 특수 cmdlet을 사용할 수 있습니다. 사용자 지정 작업 유형에 대한 자세한 내용은 작업 유형에 대한 도움말 항목을 참조하세요.
작업의 작업 유형을 찾으려면 Get-Job cmdlet을 사용합니다. Get-Job은 다양한 유형의 작업에 대해 다양한 작업 개체를 반환합니다. Get-Job이 반환하는 작업 개체의 PSJobTypeName 속성 값은 작업 유형을 나타냅니다.
다음 표에서는 Windows PowerShell에서 제공된 작업 유형을 보여줍니다.
Job Type Description
-------- -----------
BackgroundJob Started by using the Start-Job cmdlet.
RemoteJob Started by using the AsJob parameter of the
Invoke-Command cmdlet.
PSWorkflowJob Started by using the AsJob parameter of a
workflow.
PSScheduledJob An instance of a scheduled job started by
a job trigger.
CIMJob Started by using the AsJob parameter of
a cmdlet from a CDXML module.
WMIJob Started by using the AsJob parameter of
a cmdlet from a WMI module.
PSEventJob Created by running Register-ObjectEvent
and specifying an action with the Action
parameter.
참고:
특정 유형의 작업을 가져오기 전에 Get-Job cmdlet을 사용하기 전에 작업 유형을 추가하는 모듈을 현재 세션으로 가져오는지 확인합니다. 그렇지 않으면 Get-Job은 해당 유형의 작업을 가져오지 않습니다.
예제
다음 명령은 백그라운드 작업, 원격 백그라운드 작업, 워크플로 작업 및 예약된 작업을 생성합니다. 그런 다음 Get-Job cmdlet을 사용하여 작업을 가져옵니다. Get-Job은 예약된 작업을 가져오지 않지만 예약된 작업의 시작 인스턴스는 가져옵니다.
# Start a background job on the local computer.
PS C:\> Start-Job -Name LocalData {Get-Process}
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 LocalData BackgroundJob Running True localhost Get-Process
# Start a background job that runs on a remote computer.
PS C:\> Invoke-Command -ComputerName Server01 {Get-Process} -AsJob -JobName RemoteData
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 RemoteData RemoteJob Running True Server01 Get-Process
# Create a scheduled job
PS C:\> Register-ScheduledJob -Name ScheduledJob -ScriptBlock {Get-Process} `
-Trigger (New-JobTrigger -Once -At "3 PM")
Id Name JobTriggers Command Enabled
-- ---- ----------- ------- -------
1 ScheduledJob 1 Get-Process True
# Create a workflow.
PS C:\> workflow Test-Workflow {Get-Process}
# Run the workflow as a job.
PS C:\> Test-Workflow -AsJob -JobName TestWFJob
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 TestWFJob PSWorkflowJob NotStarted True localhost Get-Process
# Get the jobs. The Get-Job command does not get scheduled jobs, but it gets
instances of the scheduled job that are started.
PS C:\> Get-Job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 LocalData BackgroundJob Completed True localhost Get-Process
4 RemoteData RemoteJob Completed True Server01 Get-Process
6 TestWFJob PSWorkflowJob Completed True localhost WorkflowJob
8 ScheduledJob PSScheduledJob Completed True localhost Get-Process
# To get scheduled jobs, use the Get-ScheduledJob cmdlet.
PS C:\> Get-ScheduledJob
Id Name JobTriggers Command Enabled
-- ---- ----------- ------- -------
1 ScheduledJob 1 Get-Process True
참고 항목
about_Jobs
about_Remote_Jobs
about_Remote
about_Scheduled_Jobs
Invoke-Command
Start-Job
Get-Job
Wait-Job
Stop-Job
Remove-Job
Suspend-Job
Resume-Job
New-PSSession
Enter-PSSession
Exit-PSSession
Register-ScheduledJob
Get-ScheduleJob