about_Scheduled_Jobs_Troubleshooting
업데이트 날짜: 2014년 5월
적용 대상: Windows PowerShell 3.0, Windows PowerShell 4.0
항목
about_Scheduled_Jobs_Troubleshooting
간단한 설명
예약된 작업과 관련된 문제 해결 방법에 대해 설명합니다.
자세한 설명
이 섹션에서는 Windows PowerShell®의 예약된 작업 기능을 사용할 때 발생할 수 있는 일부 문제에 대해 설명하고 이들 문제에 대한 해결 방법을 제안합니다.
Windows PowerShell 예약된 작업을 사용하기 전에 about_Scheduled_Jobs 및 항목에 대한 관련 예약된 작업을 참조하세요.
이 항목은 다음 섹션으로 구성됩니다.
-- 작업 결과를 찾을 수 없음
-- 예약된 작업이 실행되지 않음
-- 예약된 작업을 가져올 수 없음: 예약된 작업이 손상됨
-- JOB CMDLET이 예약된 작업을 일관성 있게 찾을 수 없음
작업 결과를 찾을 수 없음
-- Windows PowerShell에서 작업 결과를 가져오는 기본 방법
예약된 작업이 실행되면 예약된 작업의 "인스턴스"를 만듭니다. 예약된 작업 인스턴스의 결과를 보고, 관리하고, 가져오려면 Job cmdlet을 사용합니다.
참고: 예약된 작업의 인스턴스에서 Job cmdlet을 사용하려면 PSScheduledJob 모듈을 세션으로 가져와야 합니다. PSScheduledJob 모듈을 가져오려면 "Import-Module PSScheduledJob"(따옴표 제외)을 입력하거나 Get-ScheduledJob 등의 예약된 Job cmdlet을 사용합니다.
예약된 작업의 모든 인스턴스 목록을 가져오려면 Get-Job cmdlet을 사용합니다.
PS C:\> Import-Module PSScheduledJob PS C:\> Get-Job ProcessJob Id Name PSJobTypeName State HasMoreData Location -- ---- ------------- ----- ----------- -------- 43 ProcessJob PSScheduledJob Completed False localhost 44 ProcessJob PSScheduledJob Completed False localhost 45 ProcessJob PSScheduledJob Completed False localhost 46 ProcessJob PSScheduledJob Completed False localhost 47 ProcessJob PSScheduledJob Completed False localhost 48 ProcessJob PSScheduledJob Completed False localhost 49 ProcessJob PSScheduledJob Completed False localhost 50 ProcessJob PSScheduledJob Completed False localhost
다음 명령은 Format-Table cmdlet을 사용하여 예약된 작업 인스턴스의 Name, ID 및 PSBeginTime 속성을 테이블로 표시합니다.
PS C:\> Get-Job ProcessJob | Format-Table -Property Name, ID, PSBeginTime -Auto Name Id PSBeginTime ---- -- --------- 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
예약된 작업의 인스턴스 결과를 가져오려면 Receive-Job cmdlet을 사용합니다. 다음 명령은 가장 새로운 ProcessJob(ID = 50) 인스턴스의 결과를 가져옵니다.
PS C:\> Receive-Job -ID 50
-- 디스크에서 작업 결과를 찾는 기본 방법
예약된 작업을 관리하려면 Get-Job 및 Receive-Job과 같은 Job cmdlet을 사용합니다.
Get-Job이 작업 인스턴스를 가져오지 않거나 Receive-Job이 작업 결과를 가져오지 않으면 디스크에서 작업에 대한 실행 기록 파일을 검색할 수 없습니다. 실행 기록에는 모든 트리거된 작업 인스턴스의 레코드가 포함됩니다.
다음 경로에서 예약된 작업에 대한 디렉터리에 타임스탬프로 이름이 지정된 디렉터리가 있는지 확인합니다.
$home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJob \<ScheduledJobName>\Output
일반적으로:
C:\Users\<UserName>\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJob \<ScheduledJobName>\Output
예를 들어 다음 명령은 ProcessJob 예약된 작업의 디스크 실행 기록을 가져옵니다.
PS C:\> dir $home\AppData\Local\Microsoft\Windows\PowerShell \ScheduledJobs\ProcessJob\Output Directory: C:\Users\User01\AppData\Local\Microsoft\Windows\PowerShell \ScheduledJobs\ProcessJob\Output Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 11/2/2011 3:00 AM 20111102-030002-260 d---- 11/3/2011 3:00 AM 20111103-030002-277 d---- 11/4/2011 3:00 AM 20111104-030002-209 d---- 11/5/2011 3:00 AM 20111105-030002-251 d---- 11/6/2011 3:00 AM 20111106-030002-174 d---- 11/7/2011 12:00 AM 20111107-000001-914 d---- 11/7/2011 3:00 AM 20111107-030002-376
각 타임스탬프 디렉터리는 작업 인스턴스를 나타냅니다. 각 작업 인스턴스의 결과는 타임스탬프 디렉터리의 Results.xml 파일에 저장됩니다.
예를 들어 다음 명령은 ProcessJob 예약된 작업의 모든 저장된 인스턴스에 대한 Results.xml 파일을 가져옵니다.
PS C:\> dir $home\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs \ProcessJob\Output\*\Results.xml Directory: C:\Users\User01\Appdata\Local\Microsoft\Windows\PowerShell \ScheduledJobs\ProcessJob\Output
Results.xml 파일이 없으면 Windows PowerShell에서는 작업 결과를 반환하거나 표시할 수 없습니다.
-- PSScheduledJob 모듈을 세션으로 가져오지 않으므로 Job cmdlet은 예약된 작업 인스턴스 또는 해당 결과를 가져올 수 없습니다.
참고: 예약된 작업 인스턴스에서 Job cmdlet을 사용하기 전에 PSScheduledJob 모듈이 세션이 포함되어 있는지 확인합니다. 모듈이 없으면 Job cmdlet은 예약된 작업 인스턴스 또는 해당 결과를 가져올 수 없습니다.
PSScheduledJob 모듈을 가져오려면 다음을 입력합니다.
Import-Module PSScheduledJob
-- Receive-Job cmdlet이 현재 세션에서 이미 결과를 반환했을 수 있습니다.
Receive-Job이 작업 인스턴스 결과를 반환하지 않으면 이는 해당 작업 인스턴스에 대한 Receive-Job 명령이 Keep 매개 변수 없이 현재 세션에서 실행되었기 때문일 수 있습니다.
Receive-Job을 Keep 매개 변수 없이 사용하면 Receive-Job은 작업 결과를 반환하고 작업 인스턴스의 HasMoreData 속성을 False로 설정하여 작업 인스턴스에 대한 모든 결과를 반환했고 반환할 추가 결과가 없음을 나타냅니다. 이 설정은 표준 백그라운드 작업에는 적절하지만 디스크에 저장되는 예약된 작업 인스턴스에는 적절하지 않습니다.
작업 인스턴스 결과를 다시 가져오려면 새 Windows PowerShell 세션을 시작하고(따옴표 없이 "PowerShell" 입력), PSScheduledJob 모듈을 가져오고, Receive-Job 명령을 다시 시도합니다.
PS C:\> Receive-Job -ID 50 PS C:\> #No results PS C:\> PowerShell Windows PowerShell Copyright (C) 2012 Microsoft Corporation. All rights reserved. PS C:\> Import-Module PSScheduledJob PS C:\> Receive-Job -ID 50 Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 1213 33 12348 21676 88 25.71 1608 CcmExec 29 4 1168 2920 43 0.02 748 conhost 46 6 2208 4612 45 0.03 1640 conhost ...
한 세션에서 작업 인스턴스 결과를 두 번 이상 가져오려면 Receive-Job cmdlet의 Keep 매개 변수를 사용합니다.
PS C:\> Import-Module PSScheduledJob PS C:\> Receive-Job -ID 50 -Keep Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 1213 33 12348 21676 88 25.71 1608 CcmExec 29 4 1168 2920 43 0.02 748 conhost 46 6 2208 4612 45 0.03 1640 conhost PS C:\> Receive-Job -ID 50 -Keep Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName ------- ------ ----- ----- ----- ------ -- ----------- 1213 33 12348 21676 88 25.71 1608 CcmExec 29 4 1168 2920 43 0.02 748 conhost 46 6 2208 4612 45 0.03 1640 conhost
-- 예약된 작업이 손상되었을 수 있습니다.
예약된 작업이 손상되면 Windows PowerShell에서는 손상된 예약된 작업 및 해당 결과를 삭제합니다. 손상된 예약된 작업의 결과는 복구할 수 없습니다.
예약된 작업이 있는지 확인하려면 Get-ScheduledJob cmdlet을 사용합니다.
PS C:\> Get-ScheduledJob
-- 결과 수가 예약된 작업의 ExecutionHistoryLength를 초과했을 수 있습니다.
예약된 작업의 ExecutionHistoryLength는 디스크에 저장되는 작업 인스턴스 및 해당 결과 수를 결정합니다. 기본값은 32입니다. 예약된 작업의 인스턴스 수가 이 값을 초과하면 Windows PowerShell에서는 가장 오래된 작업 인스턴스를 삭제하여 각 새 작업 인스턴스에 사용할 공간을 만듭니다.
예약된 작업의 ExecutionHistoryLength 속성 값을 가져오려면 다음 명령 형식을 사용합니다.
(Get-ScheduledJob <JobName>).ExecutionHistoryLength
예를 들어 다음 명령은 ProcessJob 예약된 작업의 ExecutionHistoryLength 속성 값을 가져옵니다.
PS C:\> (Get-ScheduledJob ProcessJob).ExecutionHistoryLength
ExecutionHistoryLength 속성 값을 설정하거나 변경하려면 Register-ScheduledJob 및 Set-ScheduledJob cmdlet의 MaxResultCount 매개 변수를 사용합니다.
다음 명령은 ExecutionHistoryLength 속성 값을 50으로 늘립니다.
PS C:\> Get-ScheduledJob ProcessJob | Set-ScheduledJob -MaxResultCount 50
-- 작업 인스턴스 결과가 삭제되었을 수 있습니다.
Set-ScheduledJob cmdlet의 ClearExecutionHistory 매개 변수는 작업 실행 기록을 삭제합니다. 이 기능을 사용하여 디스크 공간을 확보하거나 필요하지 않거나 다른 위치에서 이미 사용, 분석 또는 저장된 결과를 삭제합니다.
예약된 작업의 실행 기록을 삭제하려면 예약된 작업의 ClearExecutionHistory 매개 변수를 사용합니다.
다음 명령은 ProcessJob 예약된 작업의 실행 기록을 삭제합니다.
PS C:\> Get-ScheduledJob ProcessJob | Set-ScheduledJob -ClearExecutionHistory
또한 Remove-Job cmdlet은 작업 결과를 삭제합니다. Remove-Job을 사용하여 예약된 작업을 삭제하면 실행 기록 및 모든 작업 결과를 포함하여 디스크에 있는 모든 작업 인스턴스가 삭제됩니다.
-- Start-Job cmdlet을 사용하여 시작한 작업이 디스크에 저장되지 않습니다.
작업 트리거 대신 Start-Job을 사용하여 예약된 작업을 시작하면 Start-Job이 표준 백그라운드 작업을 시작하지 않습니다. 백그라운드 작업 및 해당 결과가 디스크의 작업 실행 기록에 저장되지 않습니다.
Get-Job cmdlet을 사용하여 작업을 가져오고 Receive-Job cmdlet을 사용하여 작업 결과를 가져올 수 있지만, Receive-Job cmdlet의 Keep 매개 변수를 사용하지 않으면 결과는 해당 결과를 받을 때까지만 사용할 수 있습니다.
또한 백그라운드 작업과 해당 결과는 세션에 특정합니다. 만들어진 세션에서만 존재합니다. 작업을 삭제하고(Remove-Job) 세션을 닫거나 Windows PowerShell을 닫으면 작업 인스턴스 및 결과가 삭제됩니다.
예약된 작업이 실행되지 않음
-- 작업 트리거나 예약된 작업을 사용하지 않도록 설정하면 예약된 작업이 자동으로 실행되지 않습니다.
Get-ScheduledJob cmdlet을 사용하여 예약된 작업을 가져옵니다. 예약된 작업의 Enabled 속성 값이 True($true)인지 확인합니다.
PS C:\> Get-ScheduledJob ProcessJob Id Name Triggers Command Enabled -- ---- -------- ------- ------- 4 ProcessJob {1, 2} Get-Process True PS C:\> (Get-ScheduledJob ProcessJob).Enabled True
Get-JobTrigger cmdlet을 사용하여 예약된 작업의 작업 트리거를 가져옵니다. 작업 트리거의 Enabled 속성 값이 True($true)인지 확인합니다.
PS C:\> Get-ScheduledJob ProcessJob | Get-JobTrigger Id Frequency Time DaysOfWeek Enabled -- --------- ---- ---------- ------- 1 Weekly 11/7/2011 5:00:00 AM {Monday, Thursday} True 2 Daily 11/7/2011 3:00:00 PM True PS C:\> Get-ScheduledJob ProcessJob | Get-JobTrigger | Format-Table ID, Enabled -Auto Id Enabled -- ------- 1 True 2 True
-- 작업 트리거가 유효하지 않으면 예약된 작업이 자동으로 실행되지 않습니다.
예를 들어 작업 트리거가 해당 월의 5번째 월요일과 같이 발생하지 않은 날짜나 과거 날짜를 지정할 수 있습니다.
-- 작업 트리거 조건이나 작업 옵션을 충족하지 않으면 예약된 작업이 자동으로 실행되지 않습니다.
예를 들어 특정 사용자가 컴퓨터에 로그온할 때만 실행되는 예약된 작업이 해당 사용자가 로그온하지 않거나 원격으로만 연결하면 실행되지 않습니다.
예약된 작업의 옵션을 검토하고 옵션이 충족되는지 확인합니다. 예를 들어 컴퓨터가 유휴 상태여야 하거나, 네트워크 연결이 필요하거나 긴 IdleDuration 및 짧은 IdleTimeout이 포함된 예약된 작업은 실행되지 않을 수 있습니다.
Get-ScheduledJobOption cmdlet을 사용하여 작업 옵션과 해당 값을 검토합니다.
PS C:\> Get-ScheduledJob -Name ProcessJob StartIfOnBatteries : False StopIfGoingOnBatteries : True 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
예약된 작업 옵션에 대한 자세한 내용은 New-ScheduledJobOption cmdlet(https://go.microsoft.com/fwlink/?LinkID=223919)(영문)에 대한 도움말 항목을 참조하세요.
-- 예약된 작업 인스턴스가 실패했을 수 있습니다.
예약된 작업 명령이 실패하면 Windows PowerShell에서는 즉시 오류 메시지를 생성하여 실패를 보고합니다. 그러나 작업 스케줄러가 실행하려고 할 때 작업이 실패한 경우 Windows PowerShell에서 오류를 사용할 수 없습니다.
다음 방법을 사용하여 작업 실패를 검색하고 수정합니다.
-- 작업 스케줄러 이벤트 로그에서 오류를 확인합니다. 로그를 확인하려면 이벤트 뷰어를 사용하거나 다음과 같은 Windows PowerShell 명령을 사용합니다.
Get-WinEvent -LogName Microsoft-Windows-TaskScheduler/Operational | Where {$_.Message -like "*fail*"}
작업 스케줄러에서 작업 레코드를 확인하려면 Windows PowerShell 예약된 작업이 다음 작업 예약 폴더에 저장되었는지 확인합니다.
Task Scheduler Library\Microsoft\Windows\PowerShell\ScheduledJobs
-- 권한이 없어서 예약된 작업이 실행되지 않을 수 있습니다.
예약된 작업은 작업을 만든 사용자의 권한이나 Register-ScheduledJob 또는 Set-ScheduledJob 명령에서 Credential 매개 변수로 지정된 사용자의 권한으로 실행됩니다.
해당 사용자에게 명령이나 스크립트를 실행할 권한이 없으면 작업이 실패합니다.
예약된 작업을 가져올 수 없음: 예약된 작업이 손상됨
드물지만 예약된 작업이 손상되거나 해결할 수 없는 내부 모순을 포함할 수 있습니다. 일반적으로 이 문제는 예약된 작업의 XML 파일을 수동으로 편집할 때 발생하여 XML이 유효하지 않게 됩니다.
예약된 작업이 손상되면 Windows PowerShell에서는 예약된 작업, 실행 기록 및 결과를 디스크에서 삭제하려고 합니다.
예약된 작업을 제거할 수 없으면 Get-ScheduledJob cmdlet을 실행할 때마다 손상된 작업 오류 메시지가 표시됩니다.
손상된 예약된 작업을 제거하려면 다음 방법의 하나를 사용합니다. 여기에 섹션 본문을 삽입합니다.
-- 예약된 작업에 대한 <ScheduledJobName> 디렉터리를 삭제합니다. ScheduledJob 디렉터리는 삭제하지 마세요.
디렉터리는 $env:UserProfile\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs\<ScheduledJobName>에 있습니다.
일반적으로:
C:\Users\<UserName>\AppData\Local\Microsoft\Windows\PowerShell \ScheduledJobs\<ScheduledJobName>.
-- 작업 스케줄러를 사용하여 예약된 작업을 삭제합니다. Windows PowerShell 예약된 작업은 다음 작업 스케줄러 경로에 나타납니다.
Task Scheduler Library\Microsoft\Windows\PowerShell\ScheduledJobs\<ScheduledJobName>
JOB CMDLET이 예약된 작업을 일관성 있게 찾을 수 없음
PSScheduledJob 모듈이 현재 세션에 없으면 Job cmdlets은 예약된 작업을 가져와서 시작하거나 해당 결과를 가져올 수 없습니다.
PSScheduledJob 모듈을 가져오려면 "Import-Module PSScheduledJob"을 입력하거나 모듈에서 Get-ScheduledJob cmdlet 등의 cmdlet을 실행하거나 가져옵니다. Windows PowerShell 3.0부터 모듈에서 cmdlet을 가져오거나 사용할 때 모듈을 자동으로 가져옵니다.
PSScheduledJob cmdlet이 현재 세션에 없으면 다음 명령 시퀀스가 가능합니다.
PS C:\> Get-Job ProcessJob
Get-Job : The command cannot find the job because the job name
ProcessJob was not found.
Verify the value of the Name parameter, and then try the command again.
+ CategoryInfo : ObjectNotFound: (ProcessJob:String) [Get-Job],
PSArgumentException
+ FullyQualifiedErrorId : JobWithSpecifiedNameNotFound,Microsoft.PowerShell.
Commands.GetJobCommand
PS C:\> Get-Job
PS C:\> Get-ScheduledJob ProcessJob
Id Name Triggers Command Enabled
-- ---- -------- ------- -------
4 ProcessJob {1} Get-Process True
PS C:\> Get-Job ProcessJob
Id Name PSJobTypeName State HasMoreData Location
-- ---- ------------- ----- ----------- --------
43 ProcessJob PSScheduledJob Completed True localhost
44 ProcessJob PSScheduledJob Completed True localhost
45 ProcessJob PSScheduledJob Completed True localhost
46 ProcessJob PSScheduledJob Completed True localhost
47 ProcessJob PSScheduledJob Completed True localhost
48 ProcessJob PSScheduledJob Completed True localhost
49 ProcessJob PSScheduledJob Completed True localhost
50 ProcessJob PSScheduledJob Completed True localhost
이 동작은 Get-ScheduledJob 명령이 PSScheduledJob 모듈을 자동으로 가져오고 명령을 실행하기 때문에 발생합니다.
참고 항목
about_Scheduled_Jobs
about_Scheduled_Jobs_Basics
about_Scheduled_Jobs_Advanced