Создание задания планировщика с помощью PowerShell

Большинство пользователей и администраторов для создания задания планировщика Windows (Task Scheduler), запускаемого по расписанию, привыкли использовать графический интерфейс консоли Taskschd.msc. Однако в различных скриптах и автоматизируемых задачах для создания заданий планировщика гораздо удобнее использовать возможности PowerShell. В этой статье мы покажем как с помощью PowerShell (версии 2.0 и 4.0) создавать новые задания планировщика Windows, экспортировать задания в xml файл и импортировать их на другие компьютеры.

Предположим, наша задача создать задание планировщика которое бы запускалось при загрузке системы (или в определенное время), задание должно выполнять некий PowerShell скрипт или команду.

Как создать задание планировщика в PowerShell 2.0

В версии Powershell 2.0 (Windows 7, Windows Server 2008 R2) для создания повторяющегося задания (ScheduledJob) из PowerShell необходимо воспользоваться COM интерфейсом Schedule.Service.  В этом примере мы создадим задание планировщика, которое во время загрузке системы должно выполнить определённый файл с PowerShell скриптом. Задание выполняется с правами системы (System).

$TaskName = "NewPsTask"
$TaskDescription = "Запуск скрипта PowerShell из планировщика"
$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
#http://msdn.microsoft.com/en-us/library/windows/desktop/aa383915(v=vs.85).aspx
$trigger = $triggers.Create(8)

Примечание. В этом случае создается триггер, срабатывающей при загрузке системы – код 8. Полный список кодов:

TASK_TRIGGER_EVENT 0
TASK_TRIGGER_TIME 1
TASK_TRIGGER_DAILY 2
TASK_TRIGGER_WEEKLY 3
TASK_TRIGGER_MONTHLY 4
TASK_TRIGGER_MONTHLYDOW 5
TASK_TRIGGER_IDLE 6
TASK_TRIGGER_REGISTRATION 7
TASK_TRIGGER_BOOT 8
TASK_TRIGGER_LOGON 9
TASK_TRIGGER_SESSION_STATE_CHANGE 11

$trigger.StartBoundary = $TaskStartTime.ToString("yyyy-MM-dd'T'HH:mm:ss")
$trigger.Enabled = $true
# http://msdn.microsoft.com/en-us/library/windows/desktop/aa381841(v=vs.85).aspx
$Action = $TaskDefinition.Actions.Create(0)
$action.Path = "$TaskCommand"
$action.Arguments = "$TaskArg"
#http://msdn.microsoft.com/en-us/library/windows/desktop/aa381365(v=vs.85).aspx
$rootFolder.RegisterTaskDefinition("$TaskName",$TaskDefinition,6,"System",$null,5)

После выполнения команды в планировщике появится новое задание NewPsTask.

Создание задания планировщика с помощью PowerShellСинтаксис команд довольно сложный, поэтому разработчики добавили в PowerShell Pack  (является частью Windows 7 Resource Kit) отдельный модуль TaskScheduler, который существенно упрощает процесс создания заданий планировщика из PowerShell 2.0. После установки модуля создать задание можно с помощью таких команд:

Import-Module TaskScheduler $task = New-Task
$task.Settings.Hidden = $true
Add-TaskAction -Task $task -Path C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe –Arguments “-File C:\MyScript.ps1”
Add-TaskTrigger -Task $task -Daily -At “10:00”
Register-ScheduledJob –Name ”ShTaskPs” -Task $task

Как создать задание планировщика в PowerShell 4.0 (Windows Server 2012 R2)

В Windows Server 2012 R2 и Windows 8.1 в версии PowerShell 3.0 и 4.0 появились новые командлеты для созданий заданий планировщика: New-ScheduledTaskTrigger, Register-ScheduledTask. Создать задание планировщика теперь можно гораздо проще и удобнее.

Создадим задание с именем StartupScript_PS, которое каждый день в 10:00 из-под учетной записи системы (SYSTEM) запускает PoSh скрипт, хранящийся в файле C:\PS\StartupScript.ps1. Задание будет выполняться с повышенными привилегиями (галка «Run with highest privileges»).

$Trigger= New-ScheduledTaskTrigger -At 10:00am -Daily
$User= "NT AUTHORITY\SYSTEM"
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "C:\PS\StartupScript.ps1"
Register-ScheduledTask -TaskName "StartupScript_PS" -Trigger $Trigger -User $User -Action $Action -RunLevel Highest –Force

Совет. Если нужно, чтобы задание запускалось каждый раз при загрузке системы, первая команда должна быть такой:
$Trigger= New-ScheduledTaskTrigger -AtStartup
Если при входе пользователя в систему:
$Trigger= New-ScheduledTaskTrigger -AtLogon

Register-ScheduledTask - Windows 10 / Windows Server 2012 R2Проверим, что в планировщике появилось новое задание.

Новое задание планировщика, созданное с помощью PowerShell

Экспорт задания планировщика в XML файл

PowerShell предоставляет возможность экспортировать текущие настройки любого задания планировщика в текстовый XML файл. Таким образом можно выгрузить параметры любого задания и распространить задание любой сложности на другие компьютеры сети. Экспорт задания может быть выполнен как из графического интерфейса Task Scheduller, так и из командой строки PowerShell.

Команда экспорта задания с именем StartupScript_PS в файл StartupScript_PS.xml:

Export-ScheduledTask "StartupScript_PS" | out-file c:\tmp\StartupScript_PS.xml

Export-ScheduledTask в XML - сохранить настройки задания в файл

Командлет Export-ScheduledTask не будет работать в PowerShell 2.0, поэтому в Windows 7 / 2008 R2 для экспорта настроек задания в XML файл лучше воспользоваться встроенной утилитой schtasks, вывод которой нужно перенаправить в текстовый файл:

schtasks /query /tn "NewPsTask" /xml >> "c:\tmp\NewPsTask.xml"

Совет. Напомним, что ранее для создания и управления заданиями планировщика в основном использовались возможности встроенной консольной утилиты schtasks.exe.

Импорт задания планировщика из XML файла

После того, как настройки задания планировщика экспортированы в XML файл, его можно импортировать на любой другой компьютер сети с помощи графической консоли, SchTasks.exe или PowerShell.

Импортировать параметры задания и зарегистрировать его поможет командлет Register-ScheduledTask.

Register-ScheduledTask -Xml (Get-Content “\\Server1\public\NewPsTask.xml” | out-string) -TaskName "NewPsTask"

Register-ScheduledTask: импорт настроек задания планировщика в файл

В PowerShell 2.0 (Windows 7/Server 2008 R2) импорт задания также проще выполнить с помощью утилиты schtasks. Первая команда создаст новое задание. Вторая – сразу запустит его (не дожидаясь срабатывания триггера).

schtasks /create /tn "NewPsTask" /xml "\\Server1\public\NewPsTask.xml " /ru corp\aaivanov /rp Pa$$w0rd
schtasks /Run /TN "NewPsTask"

Примечание. Обратите внимание, что в этом примере указаны данные учетной записи, из-под которой будет запускаться задание. Если данные учетной записи не будут указаны, то т.к. они не хранятся в задании, они будут запрошены при импорте.
(Пока оценок нет)
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x