대부분의 사용자와 관리자는 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를 엽니다. 콘솔을 열고 작업 스케줄러 라이브러리에 새 스케줄러 작업이 있는지 확인하십시오.

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

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"
이 예에서는 작업을 실행하는 데 사용되는 계정의 자격 증명을 사용합니다. 자격 증명이 지정되지 않은 경우 작업에 저장되지 않기 때문에 가져올 때 자격 증명이 요청됩니다.