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