다음을 통해 공유


about_Scheduled_Jobs_Basics

간단한 설명

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

자세한 설명

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

PSScheduledJob 모듈에 포함된 cmdlet에 대한 자세한 내용은 PSScheduledJob을 참조하세요.

예약된 작업을 만드는 방법

예약된 작업을 만들려면 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. 트리거 매개 변수를 사용하여 변수에서 작업 트리거를 $T 지정합니다.

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

Register-ScheduledJob @JobParms

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

Add-JobTrigger -Name ProcessJob -Trigger $T

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

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

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

Get-JobTrigger는 ProcessJob의 작업 트리거를 가져옵니다.

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

$O = New-ScheduledJobOption -WakeToRun

작업 옵션을 가져오는 방법

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

Get-ScheduledJobOption는 ProcessJob작업 옵션을 가져옵니다.

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

작업 옵션을 변경하는 방법

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

스플래트는 $JobParms 프로세스 작업을 만들기 위해 Add-JobTrigger cmdlet에 전달됩니다. ScheduledJobOption 매개 변수를 사용하여 변수의 $O 작업 옵션을 지정합니다.

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

Add-JobTrigger @JobParms

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

Set cmdlet과 같은 Set-ScheduledJobOption PSScheduledJob 모듈의 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 백그라운드 작업과 유사한 작업 인스턴스를 만듭니다. 작업 cmdlet(예: Get-JobStop-Job Receive-Job 작업 cmdlet)을 사용하고 작업 인스턴스를 관리할 수 있습니다.

참고 항목

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

PowerShell 예약된 작업의 모든 인스턴스와 모든 활성 표준 작업을 얻으려면 cmdlet을 Get-Job 사용합니다. cmdlet은 Import-Module PSScheduledJob 모듈을 가져오고 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

예약된 작업 결과 가져오기

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

참고 항목

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

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

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

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

참고 항목