Содержание
Создание задания планировщика с помощью 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)
$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 Pack (является частью Windows 7 Resource Kit) отдельный модуль TaskScheduler, который существенно упрощает процесс создания заданий планировщика из PowerShell 2.0. После установки модуля создать задание можно с помощью таких команд:
Import-Module TaskScheduler $task = New-Task$task.Settings.Hidden = $trueAdd-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
Проверим, что в планировщике появилось новое задание.
Экспорт задания планировщика в XML файл
PowerShell предоставляет возможность экспортировать текущие настройки любого задания планировщика в текстовый XML файл. Таким образом можно выгрузить параметры любого задания и распространить задание любой сложности на другие компьютеры сети. Экспорт задания может быть выполнен как из графического интерфейса Task Scheduller, так и из командой строки PowerShell.
Команда экспорта задания с именем StartupScript_PS в файл StartupScript_PS.xml:
Export-ScheduledTask «StartupScript_PS» | out-file c:\tmp\StartupScript_PS.xml
Командлет Export-ScheduledTask не будет работать в PowerShell 2.0, поэтому в Windows 7 / 2008 R2 для экспорта настроек задания в XML файл лучше воспользоваться встроенной утилитой schtasks, вывод которой нужно перенаправить в текстовый файл:
schtasks /query /tn «NewPsTask» /xml >> «c:\tmpewPsTask.xml»
Импорт задания планировщика из XML файла
После того, как настройки задания планировщика экспортированы в XML файл, его можно импортировать на любой другой компьютер сети с помощи графической консоли, SchTasks.exe или PowerShell.
Импортировать параметры задания и зарегистрировать его поможет командлет Register-ScheduledTask.
Register-ScheduledTask -Xml (Get-Content “\\Server1\publicewPsTask.xml” | out-string) -TaskName «NewPsTask»
В PowerShell 2.0 (Windows 7/Server 2008 R2) импорт задания также проще выполнить с помощью утилиты schtasks. Первая команда создаст новое задание. Вторая – сразу запустит его (не дожидаясь срабатывания триггера).
schtasks /create /tn «NewPsTask» /xml «\\Server1\publicewPsTask.xml » /ru corp\aaivanov /rp Pa$$w0rd
schtasks /Run /TN «NewPsTask»
Источник: https://winitpro.ru/index.php/2017/06/08/sozdanie-zadaniya-planirovshhika-s-pomoshhyu-powershell/
Запуск PowerShell скриптов по расписанию
В задачи практически любого системного администратора входит написание различных скриптов и их запуск. Запланировать запуск скрипта по расписанию с помощью Task Sheduler — задача несложная, но при использовании PowerShell есть некоторые нюансы, о которых я расскажу в этой статье.
Итак, предположим, у меня есть скрипт start.ps1, который мне необходимо запускать ежедневно в течении 10 дней. Есть два способа решить эту задачу.
Способ 1
Для запуска скрипта воспользуемся оснасткой Task Scheduler, он же планировщик заданий. Найти его можно в разделе Administrative Tools, либо нажав Win+R и введя команду taskschd.msc. Открываем планировщик и в разделе Actions выбираем пункт Create Task.
На вкладке General указываем имя и описание задания, а также (по необходимости) пользователя, от имени которого задание будет запускаться. Для того, чтобы задание выполнялось вне зависимости от того, залогинен ли пользователь в системе, выбираем опцию «Run whether user is logged on or not». Если для выполнения задания требуется повышение привилегий, то отмечаем опцию «Run with highest privileges».
Далее идем на вкладку Triggers и создаем новый триггер, в котором будет храниться расписание запуска нашего задания. В поле Start указываем дату и время запуска, а в поле Expire — дату и время завершения задания. Указываем выполнять задание ежедневно (Daily) и задаем период повтора (Recur every) 1 день.
Примечание. Если вы хотите запускать задание чаще, чем раз в день, то надо выбрать одноразовое выполнение (One time), а в разделе Advanced settings отметить пункт Repeat task every и указать время повторения, минимум 5 минут, максимум 1 час. Если этого недостаточно, то дополнительно в поле Delay task for up to можно указать временную задержку.
И основное. Переходим на вкладку Action и указываем действие для запланированного задания. Напомню, что в целях безопасности PowerShell скрипты могут выполняться только интерактивно, то есть сначала надо запустить оболочку PowerShell и уже в ней указать путь к скрипту. Поэтому в поле «Action» указываем запуск powershell.exe, а в поле «Add Arguments» параметр -File и путь к нашему скрипту, вот так:
-File ″C:\Scripts\start.ps1″
Также в поле аргументы можно указать:
-Command — выполняет указанные команды и любые другие параметры. Этот параметр тоже можно использовать для запуска скрипта, например: -Command ″& {C:\Scripts\start.ps1}″. Кроме того, с его помощью можно передавать в скрипт параметры: -Command ″& {C:\Scripts\start.ps1 -a 1 -b 3}″;
-ExecutionPolicy — задает политику выполнения скриптов для текущего сеанса, может принимать значения Unrestricted, RemoteSigned, AllSigned и Restricted.
Заданная политика будет действовать только в текущем сеансе и имеет приоритет над любыми ранее созданными политиками;
-NonInteractive — отключить вывод интерактивных запросов к пользователю;
-WindowStyle Hidden — запуск окна PowerShell в скрытом режиме, незаметно для пользователя;
-NoProfile — предотвращает загрузку профиля, что может несколько ускорить выполнение скрипта;
-NoExit — оставить оболочку открытой после отработки скрипта.
Это может понадобиться при проверке и отладке скрипта.
Заполнив необходимые поля жмем ОК и сохраняем задание. Теперь скрипт будет запускаться по расписанию ежедневно в заданное время в течении 10 дней.
Способ 2
В PowerShell 3.0 появился новый функционал Sheduled Job, дающий возможность создавать запланированные задания прямо из консоли, не пользуясь оснасткой планировщика. Воспользуемся им для планового запуска нашего скрипта.
Сначала создаем расписание запуска (ежедневно в полпятого вечера, в течении 10 дней):
$t = New-JobTrigger -Daily -At 4:30PM -DaysInterval 10
Затем сохраняем в переменной учетные данные:
$cred = Get-Credential contoso\administrator
В качестве опции указываем запуск задания с повышенными привилегиями:
$o = New-ScheduledJobOption -RunElevated
И регистрируем задание с именем Start:
Register-ScheduledJob -Name Start -FilePath C:\Scripts\start.ps1 -Trigger $t -Credential $cred -ScheduledJobOption $o
Чтобы убедится в том, что задание создано, можно открыть планировщик и найти наше задание в разделе Microsoft\Windows\PowerShell\SheduledJobs.
Примечание. Для каждого запланированного задания PowerShell в директории %systemdrive%\Users\%username%\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs создается одноименная папка. В этой папке находится само задание в XML-файле и папка Output, в которой, в подпапках по времени выполнения, хранится история выполнения задания — результат выполнения (файлs Result.xml) и статус задания (Status.xml). Эти файлы могут пригодиться для отладки и диагностики в том случае, если задание не отрабатывает должным образом.
Execution Policy
В заключение напомню об одном немаловажном моменте, а именно о политике выполнения скриптов Execution Policy. Посмотреть текущее значение политики можно командой Get-ExecutionPolicy. Политика выполнения может иметь значения:
• Restricted — блокируется выполнение любых скриптов. Значение по умолчанию;• AllSigned — разрешено выполнение скриптов, имеющих цифровую подпись;• RemoteSigned — скрипты, подготовленные на локальном компьютере, можно запускать без ограничений, скрипты, загруженные из Интернета — только при наличии цифровой подписи;• Unrestricted — разрешено выполнение любых скриптов. При запуске неподписанного скрипта, который был загружен из Интернета, программа может потребовать подтверждение;
• Bypass — ничего не блокируется, никакие предупреждения и запросы не появляются.
Источник: https://windowsnotes.ru/powershell-2/zapusk-powershell-skripta-po-raspisaniyu/