다음을 통해 공유


예약된 작업 기본 정보

간단한 설명

예약된 작업을 만들고 관리하는 방법에 대해 설명합니다.

자세한 설명입니다.

이 문서에서는 예약된 작업을 만들고 관리하는 기본 작업을 수행하는 방법을 보여 줍니다. 고급 작업에 대한 자세한 내용은 about_Scheduled_Jobs_Advanced.

예약된 작업을 만드는 방법

예약된 작업을 만들려면 cmdlet을 Register-ScheduledJob 사용합니다. cmdlet에는 작업이 실행되는 이름 및 명령 또는 스크립트가 필요합니다. RunNow 매개 변수를 추가하여 작업을 즉시 실행하거나 작업 트리거를 만들고 작업을 만들 때 작업 옵션을 설정하거나 기존 작업을 편집할 수 있습니다.

스크립트를 실행하는 작업을 만들려면 FilePath 매개 변수를 사용하여 스크립트 파일의 경로를 지정합니다. 명령을 실행하는 작업을 만들려면 ScriptBlock 매개 변수를 사용합니다.

cmdlet은 Register-ScheduledJob 명령을 실행하는 ProcessJobGet-Process 만듭니다. 이 예약된 작업에는 기본 작업 옵션과 작업 트리거가 없습니다.

Register-ScheduledJob -Name ProcessJob -ScriptBlock { Get-Process }
Id         Name            Triggers        Command       Enabled
--         ----            --------        -------       -------
8          ProcessJob      {}              Get-Process   True

작업 트리거를 만드는 방법

작업 트리거는 예약된 작업을 자동으로 시작합니다. 작업 트리거는 일회성 또는 되풀이 일정 또는 이벤트(예: 사용자가 로그온하거나 Windows를 시작할 때)일 수 있습니다. 각 작업에는 0개, 1개 또는 여러 개의 작업 트리거가 있을 수 있습니다.

작업 트리거를 만들려면 cmdlet을 New-JobTrigger 사용합니다. 다음 명령은 매주 월요일과 목요일 오전 5시에 작업을 시작하는 작업 트리거를 만듭니다. 명령은 작업 트리거를 변수에 $T 저장합니다.

$T = New-JobTrigger -Weekly -DaysOfWeek "Monday", "Thursday" -At "5:00 AM"

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

작업 트리거를 추가하는 방법

예약된 작업에 작업 트리거를 추가하면 예약된 작업의 예약된 작업 XML 파일에 작업 트리거가 추가되고 예약된 작업의 일부가 됩니다.

예약된 작업을 만들거나 기존 작업을 편집할 때 예약된 작업에 작업 트리거를 추가할 수 있습니다. 언제든지 예약된 작업의 작업 트리거를 변경할 수 있습니다.

PowerShell은 작업 스케줄러에서 사용하는 것과 동일한 작업 트리거 중 일부를 사용합니다. 작업 트리거에 대한 자세한 내용은 New-JobTrigger cmdlet에 대한 도움말 항목을 참조하세요.

다음 예제에서는 스플래팅을 사용하여 cmdlet에 전달되는 Register-ScheduledJob 매개 변수 값을 만듭니 $JobParms 다. 자세한 내용은 about_Splatting.md를 참조하세요. 는 Register-ScheduledJob 를 사용하여 @JobParms 예약된 작업을 만듭니다. Trigger 매개 변수를 사용하여 변수에서 작업 트리거를 $T 지정합니다.

$JobParms = @{
  Name = "ProcessJob"
  ScriptBlock = {Get-Command}
  Trigger = $T
}

Register-ScheduledJob @JobParms

언제든지 기존 예약된 작업에 작업 트리거를 추가할 수도 있습니다. cmdlet은 Add-JobTrigger 변수의 작업 트리거를 $TProcessJob 예약 작업에 추가합니다.

Add-JobTrigger -Name ProcessJob -Trigger $T

결과적으로 작업 트리거는 매주 월요일과 목요일 오전 5시에 ProcessJob 을 자동으로 시작합니다.

작업 트리거를 가져오는 방법

예약된 작업의 작업 트리거를 얻으려면 cmdlet을 Get-JobTrigger 사용합니다. Name, IDInputObject 매개 변수를 사용하여 작업 트리거가 아닌 예약된 작업을 지정합니다.

Get-JobTriggerProcessJob의 작업 트리거를 가져옵니다.

Get-JobTrigger -Name ProcessJob
Id   Frequency       Time                   DaysOfWeek              Enabled
--   ---------       ----                   ----------              -------
1    Weekly          11/7/2011 5:00:00 AM   {Monday, Thursday}      True

작업 옵션을 만드는 방법

작업 옵션은 작업을 시작하고 실행하기 위한 조건을 설정합니다. 모든 작업에는 사용자가 변경하지 않는 한 기본 작업 옵션이 있습니다. 작업 옵션은 예약된 시간에 작업이 실행되지 않도록 할 수 있으므로 작업 옵션을 이해하고 신중하게 사용하는 것이 중요합니다.

PowerShell은 작업 스케줄러에서 사용하는 것과 동일한 작업 옵션을 사용합니다. 작업 옵션에 대한 자세한 내용은 New-ScheduledJobOption에 대한 도움말 항목을 참조하세요.

작업 옵션은 예약된 작업 XML 파일에 저장됩니다. 예약된 작업을 만들거나 언제든지 변경할 때 작업 옵션을 설정할 수 있습니다.

cmdlet은 New-ScheduledJobOptionWakeToRun 예약된 작업 옵션이 True로 설정된 예약된 작업 옵션을 만듭니다. WakeToRun 옵션은 컴퓨터가 예약된 시작 시간에 절전 모드 또는 최대 절전 모드 상태인 경우에도 예약된 작업을 실행합니다. 명령은 작업 옵션을 변수에 $O 저장합니다.

$O = New-ScheduledJobOption -WakeToRun

작업 옵션을 가져오는 방법

예약된 작업의 작업 옵션을 얻으려면 cmdlet을 Get-ScheduledJobOption 사용합니다. Name, IDInputObject 매개 변수를 사용하여 작업 옵션이 아닌 예약된 작업을 지정합니다.

Get-ScheduledJobOptionProcessJob의 작업 옵션을 가져옵니다.

Get-ScheduledJobOption -Name ProcessJob
StartIfOnBatteries     : False
StopIfGoingOnBatteries : True
WakeToRun              : False
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

작업 옵션을 변경하는 방법

예약된 작업을 만들거나 기존 작업을 편집할 때 예약된 작업의 작업 옵션을 변경할 수 있습니다.

splatted $JobParms 가 cmdlet에 Add-JobTrigger 전달되어 프로세스 작업을 만듭니다. ScheduledJobOption 매개 변수를 사용하여 변수에 $O 작업 옵션을 지정합니다.

$JobParms = @{
  Name = "ProcessJob"
  ScriptBlock = {Get-Process}
  ScheduledJobOption = $O
}

Add-JobTrigger @JobParms

언제든지 작업 옵션을 기존 예약된 작업으로 변경할 수도 있습니다. 다음 명령은 cmdlet을 Set-ScheduledJobOption 사용하여 ProcessJob scheduledJob의 WakeToRun 옵션 값을 True로 변경합니다.

Set cmdlet과 같은 Set-ScheduledJobOptionPSScheduledJob 모듈의 cmdlet에는 이름 또는 ID 매개 변수가 없습니다. InputObject 매개 변수를 사용하여 예약된 작업 옵션을 지정하거나 cmdlet에서 Get-ScheduledJobOption 로 예약된 작업을 파이프할 Set-ScheduledJobOption수 있습니다.

이 예제에서는 cmdlet을 Get-ScheduledJob 사용하여 ProcessJob을 가져옵니다. Cmdlet을 Get-ScheduledJobOption 사용하여 ProcessJob 에서 작업 옵션을 가져온 다음 Set-ScheduledJobOption cmdlet을 사용하여 ProcessJob의 WakeToRun 작업 옵션을 True로 변경합니다.

Get-ScheduledJob -Name ProcessJob | Get-ScheduledJobOption |
 Set-ScheduledJobOption -WakeToRun

예약된 작업 인스턴스를 가져오는 방법

예약된 작업이 시작되면 PowerShell은 표준 PowerShell 백그라운드 작업과 유사한 작업 instance 만듭니다. 와 같은 Get-JobStop-JobReceive-Job 작업 cmdlet을 사용하여 작업 인스턴스를 관리할 수 있습니다.

참고

예약된 작업 인스턴스에서 작업 cmdlet을 사용하려면 PSScheduledJob 모듈을 세션으로 가져와야 합니다. PSScheduledJob 모듈을 가져오려면 예약된 작업 cmdlet(예: Get-ScheduledJob)을 입력 Import-Module PSScheduledJob 하거나 사용합니다.

PowerShell 예약된 작업의 모든 인스턴스와 모든 활성 표준 작업을 얻으려면 cmdlet을 Get-Job 사용합니다. cmdlet은 Import-ModulePSScheduledJob 모듈을 가져오고 Get-Job 로컬 컴퓨터에서 작업을 가져옵니다.

Import-Module PSScheduledJob
Get-Job

Get-Job 는 로컬 컴퓨터에서 ProcessJob 인스턴스를 가져옵니다.

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

기본 디스플레이는 일반적으로 동일한 예약된 작업의 인스턴스를 구분하는 시작 시간을 표시하지 않습니다.

cmdlet은 Get-Job 파이프라인 아래로 개체를 보냅니다. cmdlet은 Format-Table 예약된 작업의 이름, IDBeginTime 속성을 표시합니다.

Get-Job ProcessJob | Format-Table -Property Name, ID, BeginTime
Name       Id BeginTime
----       -- ---------
ProcessJob 43 11/2/2011 3:00:02 AM
ProcessJob 44 11/3/2011 3:00:02 AM
ProcessJob 45 11/4/2011 3:00:02 AM
ProcessJob 46 11/5/2011 3:00:02 AM
ProcessJob 47 11/6/2011 3:00:02 AM
ProcessJob 48 11/7/2011 12:00:01 AM
ProcessJob 49 11/7/2011 3:00:02 AM
ProcessJob 50 11/8/2011 3:00:02 AM

예약된 작업 결과 가져오기

예약된 작업의 instance 결과를 얻으려면 cmdlet을 Receive-Job 사용합니다.

참고

예약된 작업 인스턴스에서 작업 cmdlet을 사용하려면 PSScheduledJob 모듈을 세션으로 가져와야 합니다. PSScheduledJob 모듈을 가져오려면 예약된 작업 cmdlet(예: Get-ScheduledJob)을 입력 Import-Module PSScheduledJob 하거나 사용합니다.

이 예제에서는 ProcessJob 예약 작업의 최신 instance 결과를 가져옵니다(ID = 51).

Import-Module PSScheduledJob
Receive-Job -ID 51 -Keep

예약된 작업의 결과는 디스크에 저장되므로 Keep 매개 변수 Receive-Job 는 필요하지 않습니다. 그러나 Keep 매개 변수가 없으면 각 PowerShell 세션에서 예약된 작업의 결과를 한 번만 가져올 수 있습니다. 새 PowerShell 세션을 시작하려면 새 PowerShell 창을 입력 PowerShell 하거나 엽니다.

추가 정보

about_Scheduled_Jobs_Advanced

about_Scheduled_Jobs_Troubleshooting

about_Scheduled_Jobs

about_Splatting.md

작업 Scheduler