Для управления повторяющимися заданиями планировщика Windows Task Scheduler вместо графической оснастки taskschd.msc или устаревшей консольной утилиты schtasks.exe можно использовать возможности PowerShell. В этой статье мы рассмотрим, как с помощью PowerShell создавать, редактировать, удалять и запускать задания планировщика в Windows.
В современных версиях Windows для управления задачами планировщике доступен встроенный PowerShell модуль ScheduledTasks. Список командлетов в модуле можно вывести так:
Get-Command -Module ScheduledTasks

Как создать новое задание в планировщике с помощью PowerShell?
Рассмотрим, как из консоли PowerShell создать новое задание планировщика. Предположим, вы хотите создать в планировщике задание, которое должно запускаться при загрузке компьютера (или в определенное время) и выполнять какой-то PowerShell скрипт. При создании нового задания нужно указать как минимум следующие его параметры:
- Action – действие, которое выполняет задание (запустить команду, программу, скрипт). Для создания объекта используется командлет New-ScheduledTaskAction
- Trigger – определяет, когда нужно выполнить задание (по определенному расписанию или при наступлении события): New-ScheduledTaskTrigger
- Principal – учетная запись, из под которое выполняется задание: New-ScheduledTaskPrincipal
Сначала нужно указать имя задания:
$NewTaskName = "StartupScript_PS"
Укажем пользователя, из под-которого нужно запускать задание (в этом примере мы будем запускать скрипт с правами учетной записи SYSTEM).
$User="NT AUTHORITYSYSTEM"
$User = "winitproadm"
Для запуска задания от пользователя его учетная запись должна быть добавлена в локальную политику «Log on as a batch job».
Можно запускать задания от имени сервисных учетных записей AD (gMSA):
$svcUserPrincipal = New-ScheduledTaskPrincipal -UserID winitprosql01$ -LogonType Password
Далее с помощью New-ScheduledTaskTrigger нужно создать триггер, определяющий время запуска задания. Здесь можно использовать системные события:
-
AtLogOn— при входе пользователя в систему -
AtStartup— во время загрузки компьютера
Или указать время:
-
Once– запустить задание однократно -
At– задать точное время выполнения -
Daily– ежедневно -
DaysOfWeek– в определенные дни недели -
Weekly— запуск в определенные недели месяца -
WeeksInterval— интервал между неделями
Например, чтобы запускать задачу по расписанию ежедневно в 10:00:
$Trigger = New-ScheduledTaskTrigger -At 10:00am -Daily
- Запускать при каждой загрузке компьютера:
$Trigger = New-ScheduledTaskTrigger -AtStartup - Выполнять при входе пользователя:
$Trigger = New-ScheduledTaskTrigger –AtLogon - Однократный запуск в указанное время:
$Trigger= New-ScheduledTaskTrigger -Once -At 13:00 - Каждый второй вторник:
$Trigger = New-ScheduledTaskTrigger -Weekly -WeeksInterval 2 -DaysOfWeek Tuesday -At 13:00
Указываем, что должно делать наше задание (в данном случае нужно запустить указанный PowerShell скрипт):
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File C:PSStartupScript.ps1"
-Bypass позволяет запускать PowerShell скрипт по расписанию из планировщика не зависимо от настроек PowerShell Execution PolicyТеперь можно создать задание с указанными настройками:
Register-ScheduledTask -TaskName $NewTaskName -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force
Если задание успешно создано, появится надпись Ready.

Откройте консоль Taskschd.msc и проверьте, что в Task Scheduler Library появилось новое задание планировщика.

$TaskName = "NewPsTask"
$TaskDescription = "Запуск скрипта PowerShell из планировщика"
$TaskCommand = "c:windowssystem32WindowsPowerShellv1.0powershell.exe"
$TaskScript = "C:PSStartupScript.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
#http://msdn.microsoft.com/en-us/library/windows/desktop/aa383915(v=vs.85).aspx
$trigger = $triggers.Create(8)
Изменить настройки задания планировщика из PowerShell
Чтобы изменить настройки существующего задания планировщика, используется командлет Set-ScheduledTask.
Изменить время запуска (добавить несколько триггеров), изменить выполняемое действие:
$Trigger1 = New-ScheduledTaskTrigger -At 12:00 -Weekly -DaysOfWeek Monday
$Trigger2= New-ScheduledTaskTrigger -At 12:00 -Weekly -DaysOfWeek Friday
$action = New-ScheduledTaskAction -Execute "Calc.exe"
Set-ScheduledTask -TaskName StartupScript_PS -Trigger $trigger1, $trigger2 -Action $action
Изменить имя пользователя, из-под которого запускается задание и, например, режим совместимости:
$task_user = New-ScheduledTaskPrincipal -UserId 'winitprokbuldogov' -RunLevel Highest
$task_settings = New-ScheduledTaskSettingsSet -Compatibility 'Win8'
Set-ScheduledTask -TaskName StartupScript_PS -Principal $task_user -Settings $task_settings

Управление заданиями планировщика из PowerShell
Вы можете вывести список всех активных заданий планировщика в Windows с помощью команды:
Get-ScheduledTask -TaskPath | ? state -ne Disabled
Команда выведет время предыдущего запуска задания (и код ошибки) и время следующего запуска.
Get-ScheduledTask CheckServiceState_PS| Get-ScheduledTaskInfo
LastRunTime : 4/6/2025 10:00:00 AM LastTaskResult : 267011 NextRunTime : 4/7/2025 10:00:00 AM NumberOfMissedRuns : 0 TaskName : CheckServiceState_PS TaskPath : PSComputerName :

Вывести полный список параметров задания:
$task = Get-ScheduledTask StartupScript_PS
$task.Settings

Вы можете отключить это задание:
Get-ScheduledTask CheckServiceState_PS | Disable-ScheduledTask
Чтобы включить задание:
Get-ScheduledTask CheckServiceState_PS | Enable-ScheduledTask
Чтобы запустить задание немедленно (не дожидаясь расписания):
Start-ScheduledTask CheckServiceState_PS

Чтобы полностью удалить задание из Task Scheduler:
Unregister-ScheduledTask -TaskName CheckServiceState_PS
Экспорт и импорт заданий планировщика в XML файл
С помощью PowerShell можно экспортировать настройки заданий планировщика в текстовый XML файл (это удобно, когда нужно скопировать настроенные задания на другие компьютеры, или создать резевную копию).
Следующая команда экспортирует задание StartupScript_PS в файл StartupScript_PS.xml:
Export-ScheduledTask "StartupScript_PS" | out-file c:tempStartupScript_PS.xml

Чтобы импортировать это задание на другом компьютере, укажите путь к полученному XML файле в параметрах командлета Register-ScheduledTask:
Register-ScheduledTask -Xml (Get-Content “\Server1publicNewPsTask.xml” | out-string) -TaskName "NewPsTask"

Добавить комментарий