대부분의 사용자와 관리자는 taskschd.msc
를 사용합니다. Windows에서 예약된 작업을 만들고 관리하기 위한 그래픽 인터페이스 콘솔. 그러나 다양한 스크립트와 자동화된 흐름에서는 PowerShell 기능을 사용하여 예약된 작업을 만드는 것이 훨씬 더 편리합니다. 이 문서에서는 PowerShell을 사용하여 Windows 스케줄러 작업을 만들고 관리하는 방법을 보여줍니다.
PowerShell을 통해 Windows에서 예약된 작업 관리
예약된 작업 PowerShell 모듈은 Windows 10/Windows Server 2016에서 예약된 작업을 관리하는 데 사용됩니다. 다음과 같이 모듈에 cmdlet을 나열할 수 있습니다.
Get-Command -Module ScheduledTasks
- 스케줄된 작업 비활성화
- Enable-ScheduledTask
- ScheduledTask 내보내기
- Get-ClusteredScheduledTask
- Get-ScheduledTask
- Get-ScheduledTaskInfo
- 새 예약된 작업
- New-ScheduledTaskAction
- New-ScheduledTaskPrincipal
- New-ScheduledTaskSettingsSet
- New-ScheduledTaskTrigger
- Register-ClusteredScheduledTask
- Register-ScheduledTask
- Set-ClusteredScheduledTask
- Set-ScheduledTask
- Start-ScheduledTask
- Stop-ScheduledTask
- Unregister-ClusteredScheduledTask
- 예약 취소 작업
힌트 . 이전에는 기본 제공 콘솔 도구
schtasks.exe
Windows에서 스케줄러 작업을 만들고 관리하는 데 사용되었습니다. Windows PowerShell로 예약된 작업 만들기
최신 버전의 PowerShell(Windows Server 2012/Windows 8의 PowerShell 3.0부터 시작)에서는 New-ScheduledTaskTrigger를 사용할 수 있습니다. 및 Register-ScheduledTask cmdlet을 사용하여 예약된 작업을 만듭니다.
시작하는 동안(또는 특정 시간에) 실행되어야 하는 예약된 작업을 만들고 일부 PowerShell 스크립트 또는 명령을 실행해야 한다고 가정합니다. StartupScript1이라는 예약된 작업을 만들어 보겠습니다. 이 작업은 매일 오전 10시에 PowerShell 스크립트 파일 C:\PS\StartupScript.ps1을 실행해야 합니다. 작업은 SYSTEM 계정에서 상승된 권한("가장 높은 권한으로 실행" 확인란)으로 실행됩니다.
$Trigger= New-ScheduledTaskTrigger -At 10:00am -Daily
$User= "NT AUTHORITY\SYSTEM"
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C:\PS\StartupScript1.ps1"
Register-ScheduledTask -TaskName "StartupScript1" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force
작업이 성공적으로 생성되면 "준비" 상태가 나타납니다.
PowerShell 스크립트는 지정된 일정에 따라 실행됩니다. 컴퓨터에서 PS1 스크립트 실행을 방지하는 PowerShell 실행 정책이 활성화되어 있는 경우 –Bypass
를 사용하여 예약된 작업에서 PowerShell 스크립트를 실행할 수 있습니다. 매개변수.
새 작업을 생성할 때 이 코드를 사용하십시오:
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument “-NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File C:\PS\StartupScript.ps1"
$Trigger= New-ScheduledTaskTrigger -AtStartup
사용자가 로그온할 때 작업을 실행하려면:
$Trigger= New-ScheduledTaskTrigger -AtLogon
taskschd.msc
를 엽니다. 콘솔을 열고 작업 스케줄러 라이브러리에 새 스케줄러 작업이 있는지 확인하십시오.
Powershell 2.0(Windows 7, Windows Server 2008 R2)에서는 PowerShell에서 예약된 작업을 생성하기 위해 Schedule.Service를 사용할 수 있습니다. COM 인터페이스(또는 PowerShell 버전 업데이트). 이 예에서는 시작하는 동안 PowerShell 스크립트가 포함된 특정 파일을 실행하는 예약된 작업을 만듭니다. 작업은
NT AUTHORITY\SYSTEM
으로 수행됩니다. 특권.
$TaskName = "NewPsTask"
$TaskDescription = "Running PowerShell script from Task Scheduler"
$TaskCommand = "c:\windows\system32\WindowsPowerShell\v1.0\powershell.exe"
$TaskScript = "C:\PS\StartupScript.ps1"
$TaskArg = "-WindowStyle Hidden -NonInteractive -Executionpolicy unrestricted -file $TaskScript"
$TaskStartTime = [datetime]::Now.AddMinutes(1)
$service = new-object -ComObject("Schedule.Service")
$service.Connect()
$rootFolder = $service.GetFolder("\")
$TaskDefinition = $service.NewTask(0)
$TaskDefinition.RegistrationInfo.Description = "$TaskDescription"
$TaskDefinition.Settings.Enabled = $true
$TaskDefinition.Settings.AllowDemandStart = $true
$triggers = $TaskDefinition.Triggers
#https://msdn.microsoft.com/en-us/library/windows/desktop/aa383915(v=vs.85).aspx
$trigger = $triggers.Create(8)
PowerShell을 사용하여 예약된 작업을 보고 실행하는 방법
다음 명령을 사용하여 Windows에서 모든 활성 예약된 작업을 나열할 수 있습니다.
Get-ScheduledTask -TaskPath | ? state -ne Disabled
특정 작업에 대한 정보를 얻으려면:
Get-ScheduledTask CheckServiceState| Get-ScheduledTaskInfo
LastRunTime : 4/7/2021 10:00:00 AM LastTaskResult : 267011 NextRunTime : 4/8/2021 10:00:00 AM NumberOfMissedRuns : 0 TaskName : CheckServiceState TaskPath : \ PSComputerName :
이 작업을 비활성화할 수 있습니다.
Get-ScheduledTask CheckServiceState | Disable-ScheduledTask
작업을 활성화하려면:
Get-ScheduledTask CheckServiceState | Enable-ScheduledTask
일정을 기다리지 않고 즉시 작업을 실행하려면 다음을 실행하십시오.
Start-ScheduledTask CheckServiceState
작업 스케줄러 라이브러리에서 작업을 완전히 제거하려면:
Unregister-ScheduledTask -TaskName CheckServiceState
작업이 시작되는 사용자 이름을 변경해야 하는 경우(예:호환성 모드) Set-ScheduledTask를 사용하세요. cmdlet:
$task_user = New-ScheduledTaskPrincipal -UserId woshub\j.abrams' -RunLevel Highest
$task_settings = New-ScheduledTaskSettingsSet -Compatibility 'Win8'
Set-ScheduledTask -TaskName CheckServiceState_PS -Principal $task_user -Settings $task_settings
"Set-ScheduledTask: No mapping between account names and security IDs was done
” 올바른 사용자 이름을 제공했는지 확인하십시오.
XML 파일을 통해 예약된 작업을 내보내고 가져오는 방법
PowerShell을 사용하면 예약된 작업의 현재 설정을 텍스트 XML 파일로 내보낼 수 있습니다. 따라서 모든 작업의 매개변수를 내보내고 다른 컴퓨터에 작업을 배포할 수 있습니다. 작업은 작업 스케줄러 GUI와 PowerShell 콘솔에서 모두 내보낼 수 있습니다.
다음은 StartupScript라는 이름의 작업을 StartupScript.xml 파일로 내보내는 명령입니다.
Export-ScheduledTask StartupScript | out-file c:\tmp\StartupScript.xml
Export-ScheduledTask cmdlet은 PowerShell 2.0에서 사용할 수 없으므로 Windows 7/Windows Server 2008 R2에서는 기본 제공 도구 schtasks를 사용하는 것이 좋습니다. 작업 설정을 내보내고 결과를 텍스트 파일로 리디렉션하려면:
schtasks /query /tn "NewPsTask" /xml >> "c:\tmp\NewPsTask.xml"
예약된 작업 설정을 XML 파일로 내보낸 후 GUI, SchTasks.exe 또는 PowerShell을 사용하여 모든 네트워크 컴퓨터로 가져올 수 있습니다.
Register-ScheduledTask cmdlet을 사용하면 XML 파일에서 작업 설정을 가져와 등록할 수 있습니다.Register-ScheduledTask -Xml (Get-Content “\\mun-fs01\public\NewPsTask.xml” | out-string) -TaskName "NewPsTask"
PowerShell 2.0(Windows 7/Server 2008 R2)에서는 schtasks 도구를 사용하여 작업을 가져오는 것이 더 쉽습니다. 첫 번째 명령은 새 작업을 만듭니다. 두 번째는 트리거가 활성화될 때까지 기다리지 않고 즉시 실행합니다.
schtasks /create /tn "NewPsTask" /xml "\\Srv1\public\NewPsTask.xml" /ru corp\skrutapal /rp Pa$$w0rd
schtasks /Run /TN "NewPsTask"
이 예에서는 작업을 실행하는 데 사용되는 계정의 자격 증명을 사용합니다. 자격 증명이 지정되지 않은 경우 작업에 저장되지 않기 때문에 가져올 때 자격 증명이 요청됩니다.