Каждому системному администратору Windows приходилось создавать задания планировщика из графической консоли Task Scheduler. Это довольно простая и тривиальная задача. В этой небольшой статье мы рассмотрим, как создавать задания планировщика с помощью команд PowerShell.
Предположим, нам нужно создать задачу, которая будет запускать определённый скрипт PowerShell каждый понедельник и четверг в 11:00.
Для создания нового задания мы воспользуемся командлетами модуля PSScheduledJob. Чтобы этот командлет работал в Windows 7, нужно установить как минимум PowerShell версии 3.0.
Запустим консоль Powesrhell с правами администратора и импортируем модуль PSScheduledJob.
Import-Module PSScheduledJob
Создадим новый триггер:
$Trigger = New-JobTrigger -Weekly -DaysOfWeek 1,4 -At 11:00PM
Теперь создадим новое задание с именем BackupDBTask и привяжем к нему созданный ранее триггер:
Register-ScheduledJob -Name BackupDBTask -FilePath "C:\ps\backupdb.ps1" -Trigger $Trigger
Задание планировщика создано. Найти его в графической консоли Task Scheduler можно в разделе: Task Scheduler -> Task Scheduler Library -> Microsoft->Windows ->PowerShell -> SheduledJobs.
При создании нового задания PowerShell генерирует новый xml файл, который содержит определение задания. Найти этот файл можно в профиле текущего пользователя:
%USERPROFILE%\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs\BackupDBTask
В дальнейшем данный xml файл можно использовать для импорта настроек задания на других компьютерах. Импорт (создание задания с настройками из xml) выполняется такой командой:
Register-ScheduledTask -Xml (Get-Content '\\srv1\ScheduledJobDefinition.xml' | out-string) -TaskName "BackupDBTask"
В каталоге Output хранится история запуска задания.
В Windows 8 / Windows Server 2012 и выше (в этих версиях появился встроенный PowerShell 3.0) при создании задания планировщика импортировать модуль PSScheduledJob не нужно.
Просто создайте новый триггер:
$Trigger = New-JobTrigger -Weekly -DaysOfWeek 1,4 -At 08:00PM
Если нужно запускать задание от определенного пользователя, нужно получить его пароль (он будет сохранен в менеджере паролей, что конечно, не очень безопасно):
$credent = Get-Credential contoso\server-admin1
Чтобы задание запускалось с повышенными правами, включим флаг RunElevated:
$elevat = New-ScheduledJobOption –RunElevated
Теперь создадим новое задание
Register-ScheduledJob -Name BackupDBTask2 -FilePath C:\ps\backupdb.ps1 -Trigger $Trigger -Credential $credent –ScheduledJobOption $elevat
Совет. Чтобы запускать задание под учетной записью системы (Local System), используйте следующий формат команды создания задачи:
Register-ScheduledJob -Name BackupDBTask2 -FilePath C:\ps\backupdb.ps1 -Trigger $Trigger -User «System» –ScheduledJobOption $elevat
Получить информацию о всех включенных заданиях в разделе Microsoft\Windows\Powershell можно так:
Get-ScheduledTask -TaskPath \Microsoft\Windows\Pow*| ? state -ne Disabled
Чтобы получить информацию о конкретном задании, выполните:
Get-ScheduledTask BackupDBTask| Get-ScheduledTaskInfo
Чтобы отключить определенную задачу:
Get-ScheduledTask BackupDBTask| Disable-ScheduledTask