about_Scheduled_Jobs

업데이트 날짜: 2014년 5월

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

항목

about_Scheduled_Jobs

간단한 설명

예약된 작업에 대해 설명하고 Windows PowerShell® 및 작업 스케줄러에서 예약된 작업을 사용하고 관리하는 방법을 설명합니다.

자세한 설명

Windows PowerShell에서 예약된 작업은 Windows PowerShell 백그라운드 작업 및 작업 스케줄러 작업의 유용한 하이브리드입니다.

Windows PowerShell 백그라운드 작업과 마찬가지로 예약된 작업은 백그라운드에서 비동기적으로 실행됩니다. 실행된 예약된 작업의 인스턴스는 작업 cmdlet(예: Start-Job, Get-Job, Stop-Job 및 Receive-Job)을 사용하여 관리할 수 있습니다.

작업 스케줄러 작업과 마찬가지로 예약된 작업도 디스크에 저장됩니다. 작업 스케줄러의 작업 보기와 관리, 필요한 경우 사용하도록 및 사용하지 않도록 설정, 실행 또는 템플릿으로 사용, 작업을 시작하기 위한 일회성 또는 되풀이 일정 설정, 또는 작업이 시작하는 조건 설정을 수행할 수 있습니다.

또한 예약된 작업 인스턴스의 결과는 쉽게 액세스 가능한 형식으로 디스크에 저장되어 작업 출력의 실행 로그를 제공합니다. 예약된 작업은 관리하는 데 필요한 사용자 지정된 cmdlet 집합과 함께 제공됩니다. cmdlet을 사용하여 예약된 작업, 작업 트리거 및 작업 옵션을 작성, 편집, 관리, 사용하지 않도록 설정, 다시 사용하도록 설정할 수 있습니다.

이 포괄적이고 유용한 도구 집합 덕분에 예약된 작업은 많은 전문적인 Windows PowerShell IT 솔루션의 필수 구성 요소가 되었습니다.

예약된 작업 cmdlet은 Windows PowerShell와 함께 설치되는 PSScheduledJob 모듈에 포함되어 있습니다. 이 모듈은 Windows PowerShell 3.0에서 도입되었으며 Windows PowerShell 3.0 이상 버전의 Windows PowerShell에서 작동합니다.

Windows PowerShell 백그라운드 작업에 대한 자세한 내용은 About_Jobs(https://go.microsoft.com/fwlink/?LinkID=113251)를 참조하세요.

작업 스케줄러에 대한 자세한 내용은 https://go.microsoft.com/fwlink/?LinkId=232928에 있는 TechNet 라이브러리의 "작업 스케줄러"를 참조하세요.

참고: Windows PowerShell 예약된 작업을 작업 스케줄러에서 보고 관리할 수 있지만 Windows PowerShell 작업 및 예약된 작업 cmdlet은 Windows PowerShell에서 작성한 예약된 작업에서만 작동합니다.

예약된 작업 cmdlet

PSScheduledJob 모듈은 다음과 같은 cmdlet을 포함하고 있습니다.

    Register-ScheduledJob:       Creates a scheduled job.
    Get-ScheduledJob:            Gets a scheduled job.
    Set-ScheduledJob:            Changes the properties of a scheduled job
    Disable-ScheduledJob:        Temporarily disables a scheduled job.
    Enable-ScheduledJob:         Re-enables a scheduled job.
    Unregister-ScheduledJob      Deletes a scheduled job and its saved results.

    New-JobTrigger:              Creates a job trigger.
    Get-JobTrigger:              Gets a job trigger.
    Add-JobTrigger:              Adds a job trigger to a scheduled job.
    Set-JobTrigger:              Changes a job trigger.
    Disable-JobTrigger:          Temporarily disables a job trigger.
    Enable-JobTrigger:           Re-enables a job trigger.
    Remove-JobTrigger:           Deletes a job trigger.

    New-ScheduledJobOption:      Creates a job options object.
    Get-ScheduledJobOption:      Gets the job options of a scheduled job.
    Set-ScheduledJobOption:      Changes the job options of a scheduled job.

빠른 시작

다음 명령은 매일 오전 3시에 시작하고 Get-Process cmdlet을 실행하는 예약된 작업을 작성합니다. 작업은 컴퓨터가 배터리 전원으로 작동하는 경우에도 시작됩니다.

        $trigger = New-JobTrigger -Daily -At 3AM

        $options = New-ScheduledJobOption -StartIfOnBattery

        Register-ScheduledJob -Name ProcessJob -ScriptBlock {Get-Process} `
            -Trigger $trigger -ScheduledJobOption $options

다음 명령은 로컬 컴퓨터에 있는 예약된 작업을 가져옵니다.

        PS C:\> Get-ScheduledJob

        Id         Name            Triggers        Command            Enabled
        --         ----            --------        -------            -------
        7          ProcessJob      {1}             Get-Process        True

다음 명령은 ProcessJob의 작업 트리거를 가져옵니다. 트리거는 예약된 작업에 저장되므로 입력 매개 변수는 트리거가 아닌 예약된 작업을 지정합니다.

        PS C:\> Get-JobTrigger -Name ProcessJob

        Id         Frequency       Time                   DaysOfWeek              Enabled
        --         ---------       ----                   ----------              -------
        1          Daily           11/5/2011 3:00:00 AM                           True

다음 명령은 Set-ScheduledJob cmdlet의 ContinueIfGoingOnBattery 매개 변수를 사용하여 ProcessJob의 StopIfGoingOnBatteries 속성을 Flase로 변경합니다.

        PS C:\> Get-ScheduledJob -Name ProcessJob | Set-ScheduledJobOption `
               -ContinueIfGoingOnBattery -Passthru

        StartIfOnBatteries     : True
        StopIfGoingOnBatteries : False
        WakeToRun              : True
        StartIfNotIdle         : True
        StopIfGoingOffIdle     : False
        RestartOnIdleResume    : False
        IdleDuration           : 00:10:00
        IdleTimeout            : 01:00:00
        ShowInTaskScheduler    : True
        RunElevated            : False
        RunWithoutNetwork      : True
        DoNotAllowDemandStart  : False
        MultipleInstancePolicy : IgnoreNew
        JobDefinition          : Microsoft.PowerShell.ScheduledJob.ScheduledJobDefinition

다음 명령은 ProcessJob 예약된 작업을 가져옵니다.

        PS C:\> Get-ScheduledJob ProcessJob

        Id         Name            Triggers        Command        Enabled
        --         ----            --------        -------        -------
        7          ProcessJob      {1}             Get-Process    True

다음 명령은 Get-Job cmdlet을 사용하여 이제까지 실행된 ProcessJob 예약된 작업의 모든 인스턴스를 가져옵니다. Get-Job cmdlet은 PSScheduledJob을 현재 세션으로 가져온 경우에만 예약된 작업을 가져옵니다.

팁: ScheduledJob cmdlet을 사용하여 예약된 작업을 관리하지만 예약된 작업의 인스턴스를 관리할 때에는 Job cmdlet을 사용한다는 점에 주목하십시오.

        PS C:\> Get-Job -Name ProcessJob

        Id     Name        PSJobTypeName  State    HasMoreData   Location   Command
        --     ----        ------------   -----    -----------   --------   -------
        45     ProcessJob  PSScheduledJob Completed       True   localhost   Get-Process
        46     ProcessJob  PSScheduledJob Completed       True   localhost   Get-Process
        47     ProcessJob  PSScheduledJob Completed       True   localhost   Get-Process
        48     ProcessJob  PSScheduledJob Completed       True   localhost   Get-Process
        49     ProcessJob  PSScheduledJob Completed       True   localhost   Get-Process
        50     ProcessJob  PSScheduledJob Completed       True   localhost   Get-Process
        51     ProcessJob  PSScheduledJob Completed       True   localhost   Get-Process

다음 명령은 ProcessJob 예약된 작업(ID = 51)의 최근 인스턴스 결과를 가져옵니다.

        Receive-Job -ID 51    

Receive-Job 명령은 Keep 매개 변수를 포함하지 않았지만 작업의 결과는 삭제하거나 최대 결과 수를 초과할 때까지 디스크에 저장됩니다.

작업 결과는 더 이상 이 세션에서 사용할 수 없지만 새 세션을 시작하거나 새 Windows PowerShell 창을 열면 작업 결과를 다시 사용할 수 있습니다.

다음 명령은 Start-Job cmdlet의 DefinitionName 매개 변수를 사용하여 ProcessJob 예약된 작업을 시작합니다.

Start-Job cmdlet을 사용하여 시작된 작업은 예약된 작업의 인스턴스가 아니라 표준 Windows PowerShell 백그라운드 작업입니다. 모든 백그라운드 작업처럼 이들 작업은 작업 옵션이 적용되거나 작업 트리거의 영향을 받지 않고 즉시 시작되고, 해당 출력은 예약된 작업 디렉터리의 출력 디렉터리에 저장되지 않습니다.

         PS C:\>Start-Job -DefinitionName ProcessJob

다음 명령은 ProcessJob 예약된 작업 및 해당 작업 인스턴스의 모든 저장된 결과를 삭제합니다.

        PS C:\> Remove-ScheduledJob ProcessJob

예약된 작업 개념

"예약된 작업"은 명령 또는 스크립트를 실행합니다. 예약된 작업은 작업을 시작하는 "작업 트리거"와 작업을 실행하기 위한 조건을 설정하는 "작업 옵션"을 포함할 수 있습니다.

"작업 트리거"는 예약된 작업을 자동으로 시작합니다. 작업 트리거는 사용자가 로그온하거나 Windows가 시작되는 경우처럼 일회성 또는 되풀이 일정을 포함하거나 이벤트를 지정할 수 있습니다. 예약된 작업은 하나 이상의 작업 트리거를 가질 수 있으며 작업 트리거를 작성, 추가, 사용하도록 설정, 사용하지 않도록 설정하거나 가져올 수 있습니다.

작업 트리거는 선택 사항입니다. Start-Job cmdlet을 사용하거나 Register-ScheduledJob 명령에 RunNow 매개 변수를 추가하여 예약된 작업을 즉시 시작할 수도 있습니다.

"작업 옵션"은 예약된 작업을 실행하기 위한 조건을 설정합니다. 모든 예약된 작업은 작업 옵션 개체 한 개를 가집니다. 작업 옵션 개체를 만들고 편집할 수 있으며 해당 개체를 하나 이상의 예약된 작업에 추가할 수 있습니다.

예약된 작업이 시작될 때마다 "작업 인스턴스"가 생성됩니다. Windows PowerShell 작업 cmdlet을 사용하여 작업 인스턴스를 보고 관리합니다.

예약된 작업은 로컬 컴퓨터 디스크의 $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs 디렉터리에 XML 파일로 저장됩니다(그래서 cmdlet을 '새'라는 형용사 대신 '등록하다'라는 동사로 표현함).

Windows PowerShell는 각 예약된 작업에 대한 디렉터리를 만들고 작업 명령, 작업 트리거, 작업 옵션 및 작업 결과를 예약된 작업 디렉터리에 저장합니다. 작업 트리거와 작업 옵션은 디스크에 독립적으로 저장되지 않으며, 연결된 각 예약된 작업의 예약된 작업 XML에 저장됩니다.

예약된 작업, 작업 트리거 및 작업 옵션은 Windows PowerShell에 개체로 나타납니다. 이 개체는 상호 연결되어 있어 쉽게 검색하고 명령과 스크립트에 사용할 수 있습니다.

예약된 작업은 ScheduledJobDefinition 개체로 나타납니다. ScheduledJobDefinition 개체는 예약된 작업의 작업 트리거를 포함하고 있는 JobTriggers 속성과 작업 옵션을 포함하고 있는 Options 속성을 가지고 있습니다. 작업 트리거와 작업 옵션을 표시하는 ScheduledJobTriggers 및 ScheduledJobOptions 개체는 각각 연결된 예약된 작업을 포함하고 있는 JobDefinition 속성을 가지고 있습니다. 이 되풀이 상호연결 덕분에 예약된 작업의 트리거와 옵션을 쉽게 찾을 수 있으며 작업 트리거 또는 작업 옵션이 연결된 예약된 작업을 찾고, 스크립팅하고, 표시할 수 있습니다.

참고 항목

about_Scheduled_Jobs_Basics

about_Scheduled_Jobs_Advanced

about_Scheduled_Jobs_Troubleshooting

about_jobs

작업 스케줄러(https://go.microsoft.com/fwlink/?LinkId=232928)

Add-JobTrigger

Disable-JobTrigger

Disable-ScheduledJob

Enable-JobTrigger

Enable-ScheduledJob

Get-Job

Get-JobTrigger

Get-ScheduledJob

Get-ScheduledJobOption

New-JobTrigger

New-ScheduledJobOption

Receive-Job

Register-ScheduledJob

Remove-JobTrigger

Set-JobTrigger

Set-ScheduledJob

Set-ScheduledJobOption

Start-Job

Unregister-ScheduledJob