Поиск по сайту:

Как создать запланированную задачу PowerShell


Скрипты PowerShell — отличный способ автоматизировать повседневные задачи или генерировать еженедельные отчеты. Но как создать запланированное задание для ваших скриптов PowerShell? Мы можем сделать это с помощью планировщика задач для выполнения скрипта PowerShell или создать задание в PowerShell.

Преимущество запланированных задач заключается в том, что вы можете их установить и забыть о них. Они будут работать в фоновом режиме, обновлять ваши системы или генерировать отчеты, которые вам пришлось бы делать вручную.

В этой статье мы рассмотрим, как запустить скрипт PowerShell с помощью планировщика задач и как создать запланированную задачу в PowerShell.

Используйте Планировщик заданий для запуска скрипта PowerShell

Первый вариант, который мы собираемся рассмотреть, это использование планировщика задач в Windows для запуска сценария PowerShell. Планировщик задач Windows появился еще в Windows 95! и является отличным способом планирования задач в Windows.

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

Время, необходимое: 2 минуты

  1. Открыть планировщик задач

    Нажмите на Пуск и введите «Планировщик задач», чтобы открыть его. Или выберите его в меню Пуск в разделе Административные инструменты Windows (или Инструменты Windows, когда используете Win 11)

  2. Создайте новую базовую задачу

    Нажмите на Создать основные задачи… в панели действий справа и дайте вашей задаче название.
    (Я рекомендую организовать ваши задачи в папки, сначала создайте их слева)

  3. Запланировать задачу

    Триггер определяет, когда задача должна быть выполнена. Выберите триггер, например, Еженедельно, и нажмите Далее, чтобы настроить, когда именно задачи должны быть выполнены.

  4. Установить действие

    Вот важная часть, для действия мы собираемся Запустить программу

  5. Запустить программу - PowerShell

    Программа, которую мы хотим запустить, это PowerShell. Просто введите PowerShell в поле Программа/Скрипт (см. скриншот в шаге 6), вам не нужно искать точный путь к исполняемому файлу.

  6. Добавить аргументы

    В поле аргументов мы собираемся добавить аргумент -File и путь к скрипту PowerShell. Также хорошей идеей будет добавить переключатель PowerShell -NoProfile и установить -ExecutionPolicy в значение ByPass.

    Если ваши скрипты требуют какие-либо параметры, то вы можете добавить их после пути (например, параметр -Output):

    -NoProfile -ExecutionPolicy Bypass -File "C:\scripts\ADHealth.ps1" -Output "HTML"

  7. Начать в

    Всегда устанавливайте начальное местоположение в тот же путь, где находится ваш скрипт. Таким образом, любые экспортированные данные, которые генерирует ваш скрипт, будут храниться в том же местоположении, что и ваш скрипт. В противном случае вывод будет сохранен в C:\Windows\System32

  8. Закончить

    Нажмите Далее и проверьте свои настройки на экране завершения. Убедитесь, что вы выбрали Открыть диалог свойств …, чтобы настроить еще несколько параметров.

  9. Расширенные настройки

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

    И мы хотим убедиться, что скрипт прекращает работу, если он выполняется более суток. Измените эту настройку в разделе Настройки и установите Остановить задачу, если она выполняется дольше чем на 1 день или менее.

  10. Сохранить задачу

    Нажмите ОК и введите свой пароль, чтобы задача могла выполняться, когда вы не вошли в систему. Всегда полезно протестировать вашу задачу, щелкните правой кнопкой мыши на ней и выберите Запустить, чтобы выполнить задачу сейчас.

Используйте PowerShell для создания запланированной задачи

Конечно, мы также можем использовать PowerShell для создания и управления запланированными задачами. Создание запланированной задачи в PowerShell требует нескольких шагов. Для каждого шага есть другой командлет, который мы будем использовать.

Для создания запланированной задачи мы собираемся использовать следующие командлеты:

КомандлетОписание
Новый_ScheduledTaskTriggerСоздает объект триггера для запланированной задачи
НоваяЗапланированнаяЗадачаДействиеСоздает действие для запланированной задачи
Register-ScheduledTaskРегистрирует запланированную задачу
Get-ScheduledTaskПоказать запланированные задачи

Чтобы создать запланированную задачу в PowerShell, нам необходимо определить триггер и действие для задачи как минимум. Поэтому, чтобы создать простую задачу, которая выполняется каждый пятницу и запускает скрипт PowerShell, мы можем сделать следующее:

$taskTrigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Friday -At 3am
$taskAction = New-ScheduledTaskAction -Execute "PowerShell" -Argument "-NoProfile -ExecutionPolicy Bypass -File 'C:\scripts\ADHealth.ps1' -Output 'HTML'" -WorkingDirectory 'c:\scripts'

Register-ScheduledTask 'Lazy PS Tasks' -Action $taskAction -Trigger $taskTrigger

Это создаст точно такую же задачу, которую мы создали с помощью планировщика задач. Но давайте объясним каждую из командлетов, чтобы увидеть, какие у нас есть опции.

Создание триггера - New-ScheduledTaskTrigger

Первый шаг - определить триггер. Это определяет, когда мы хотим запустить задачу. Как и с планировщиком задач, мы можем определить несколько триггеров для нашей задачи.

Команда New-ScheduledTaskTrigger поставляется с несколькими параметрами, которые позволяют вам определить, когда вы хотите, чтобы задача выполнялась:

  • При входе в систему – Запускает задание, когда пользователь входит в систему
  • При запуске – Когда система запускается
  • В – Используется с Раз, Ежедневно или Еженедельно. Определяет конкретное время для выполнения задачи
  • Ежедневно – Запускается каждый день. Определите дни с помощью DaysOfWeek
  • DaysInterval – Запускать каждые x дней
  • ДниНедели – Это можно использовать с ежедневными или еженедельными задачами. Определяет, в какие дни выполнять задачу.
  • Еженедельно – Выполняет задачи каждую неделю
  • ЕженедельныйИнтервал – Определяет интервал между неделями.

Чтобы запускать задачу каждую неделю по вторникам и четвергам в 08:30 утра, мы можем создать следующий триггер:

$trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Tuesday,Thursday -At 8:30am

Определение действия - новая задача планировщика

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

Итак, чтобы запустить наш скрипт PowerShell, мы установим параметр -Execute на PowerShell и определим путь к файлу и другие параметры в параметре -Argument. Если ваши скрипты требуют этого, вы можете установить параметр WorkingDirectory на путь к вашему скрипту.

$action = New-ScheduledTaskAction -Execute 'PowerShell' -Argument '-NoProfile -ExecutionPolicy Bypass -File "C:\scripts\ADHealth.ps1" -Output "HTML"'

Создание задачи - Регистрация запланированной задачи

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

Register-ScheduledTask -TaskName 'Lazy PS Tasks' -TaskPath 'LazyTasks' -Action $taskAction -Trigger $taskTrigger

Как уже упоминалось, вы можете определить несколько триггеров и действий для вашей задачи. Для этого вам нужно добавить триггер или действия в массив. Например, чтобы выполнять задачу каждый вторник и четверг, а также в первый день месяца, мы можем сделать следующее:

Define the triggers for Tuesday and Thursday at 08:30 AM and when a user logs on
$taskTriggers = @(
    New-ScheduledTaskTrigger -Weekly -DaysOfWeek Tuesday,Thursday -At 08:30,
    New-ScheduledTaskTrigger -AtLogon
)

Register-ScheduledTask -TaskName 'Lazy PS Tasks' -TaskPath 'LazyTasks' -Action $taskAction -Trigger $taskTriggers

Выполнение задачи с различными привилегиями

Когда мы создали задачу PowerShell с Планировщиком задач, мы включили опцию выполнения задачи независимо от того, вошел ли пользователь в систему. Для этого нам также нужно было указать имя пользователя и пароль для выполнения задачи. Кроме того, нам нужно будет установить параметр -RunLevel задачи на highest:

Register-ScheduledTask -TaskName "Lazy PowerShell Tasks" -taskPath 'LazyTasks' -Action $taskAction -Trigger $taskTrigger -User "a-d\Administrator" -Password 'yourPass123' -RunLevel Highest

Просмотреть запланированное задание

Вы можете просмотреть свои созданные задачи в планировщике задач. Но вы также можете извлечь запланированную задачу с помощью PowerShell. Для этого нам нужно будет использовать командлет Get-ScheduledTask. Если вы запустите командлет без каких-либо параметров, он извлечет все запланированные задачи на вашем компьютере.

Как видите, это довольно много. Вот почему важно организовывать ваши задачи в папках, используя параметр taskPath. Таким образом, вы можете использовать параметр TaskPath, чтобы просмотреть только наши задачи:

Get-ScheduledTask -TaskPath \LazyTasks\

Путь задачи всегда начинается и заканчивается с обратного слэша \. Для просмотра ваших задач вам нужно будет указать имя задачи. Если имя уникально, то одного имени будет достаточно. В противном случае вам нужно будет указать и путь:

Get-ScheduledTask -TaskName 'Lazy PS Tasks' -TaskPath \LazyTasks\ | Select *

Как вы можете видеть на скриншоте выше, мы не можем увидеть все детали задачи. Чтобы просмотреть Действия или Триггеры, нам нужно будет развернуть свойства. Мы можем сделать это, используя метод ExpandProperty или сохранив результаты в переменной:

Get-ScheduledTask -TaskName 'Lazy PS Tasks' -TaskPath \LazyTasks\ | Select -ExpandProperty Triggers

Or
$task = Get-ScheduledTask -TaskName 'Lazy PS Tasks' -TaskPath \LazyTasks\
$task.Triggers

Обновление задач

Чтобы обновить запланированные задачи с помощью PowerShell, вы можете использовать командлет Set-ScheduledTask. Он работает аналогично командлету Register-ScheduledTask. Просто сначала создайте новый триггер или действие, а затем добавьте его так же, как если бы вы создавали его.

Define new trigger
$newTrigger= New-ScheduledTaskTrigger -Weekly -DaysOfWeek Monday -At 08:30

Update the task
Set-ScheduledTask -TaskName "Lazy PowerShell Tasks" -taskPath 'LazyTasks'-Trigger $newTrigger

Заключение

Планирование задач PowerShell можно выполнить как с помощью Планировщика задач, так и в PowerShell с использованием команды Register-ScheduledTask. Лично мне кажется проще создать задачу с помощью PowerShell, но для её модификации я считаю Планировщик задач более удобным.

Тем не менее, вы можете использовать оба варианта для планирования своих скриптов PowerShell. Надеюсь, вы нашли эту статью полезной, если у вас есть какие-либо вопросы, просто оставьте комментарий ниже.