В Windows встроенный планировщик задач можно использовать для выполнения действий по расписанию или при наступлении определенного события. В этом руководстве объясняется, как настроить сценарий PowerShell на автоматический запуск с помощью планировщика задач Windows. Сценарий PS1 должен выполняться в фоновом режиме, не отображать всплывающих окон и запускаться независимо от текущих настроек политики выполнения сценариев PowerShell.

В этом примере я хочу запустить сценарий C:\PS\Outlook_Email_to.ps1 Файл сценария PowerShell каждые 10 минут.

  1. Откройте Планировщик заданий консоль, запустив taskschd.msc команду
  2. Разверните дерево библиотеки планировщика задач. Для удобства создайте отдельную папку для пользовательских запланированных задач. Щелкните правой кнопкой мыши и выберите Создать задачу.
    Создание новой задачи с помощью планировщика задач Windows
  3. В разделе Генерал На вкладке Укажите имя задачи и пользователя, под которым она будет выполняться. Задание может запускаться автоматически:
    — когда определенный пользователь входит в систему (Run only the task is logged in)
    — или независимо от того, вошел ли пользователь в систему или нет (Run whether user is logged on or not).

    Чаще всего используется второй режим. Во втором случае можно указать, что задача должна выполняться от имени определенного пользователя (Credentials Manager используется для хранения пароля пользователя). Если задача требует повышения уровня, включите опцию ‘Запускать с наивысшими привилегиями‘ опция. Запланировать выполнение задачи, когда пользователь вошел в систему или нет

    Чтобы избежать использования сохраненного пароля, вы можете настроить задачу на запуск в качестве NT AUTHORITY\SYSTEM с наивысшими привилегиями. Для этого введите SYSTEM в поле Пользователь поле. Планирование задачи с высокими (системными) привилегиями
    В среде AD запланированные задачи могут выполняться от имени учетных записей управляемых служб gMSA.
  4. В Триггеры На вкладке задайте условие или время запуска задачи планировщика. Например, чтобы запустить задачу при входе пользователя в систему, выберите опцию ‘При входе в систему‘ триггер и выберите частоту 10 минуты в ‘Повторяйте задание каждый‘ опция. Запуск сценария PS1 при входе в систему с помощью планировщика задач
  5. Если задача выполняется от имени SYSTEM или пользователя с сохраненным паролем, выберите запуск задачи при старте Windows (При запуске) и периодически перезапускать его.
    Запуск задачи при запуске
  6. Или используйте По расписанию триггера, чтобы установить точное время запуска задачи. Для одной задачи можно настроить несколько триггеров запуска.
    Планировщик также может запускать задачу при возникновении определенного события в средстве просмотра событий (см. раздел Как запустить запланированную задачу после завершения другой задачи).
  7. Затем перейдите в раздел Действия вкладка. Укажите действие, которое будет предпринято при возникновении любого из сработавших событий. В данном случае я хочу запустить сценарий PowerShell. Выберите Новый -> Запуск программы. Настройте следующие параметры действий:
    Программа/скрипт: powershell.exe
    Добавьте аргументы (необязательно): -ExecutionPolicy Bypass -NonInteractive -WindowStyle Hidden -File "C:\PS\Outlook_Email_to.ps1" Запуск сценария Powershell из планировщика задач
    Прежде чем запускать сценарий через планировщик задач, проверьте, что он не возвращает ошибок в неуправляемом режиме. Используйте следующую команду:
    powershell.exe -file C:\PS\ Outlook_Email_to.ps1 -NoExit
  8. Для запуска сценария PowerShell используются следующие параметры:
    -File — полный путь к файлу сценария (PS1)
    -ExecutionPolicy — Установка параметров политики выполнения сценариев PowerShell для текущего сеанса. Текущие параметры политики игнорируются, и сценарий выполняется в любом случае, если Обход указано;
    -NonInteractive — Не отображать интерактивные подсказки пользователю
    -WindowStyle Hidden — Скрыть окно консоли PowerShell от пользователя (сценарий запускается скрыто). Окно приглашения PowerShell может появляться и исчезать на мгновение во время выполнения сценария, если задача планировщика настроена на запуск при входе пользователя в систему. Мигающая подсказка отсутствует только для сценариев, запущенных в консольной сессии 0 (независимо от входа пользователя).
    -NoProfile — добавьте этот параметр, если сценарий может работать без профиля пользователя. Она предотвращает загрузку профиля пользователя, что ускоряет выполнение скрипта;
  9. Вы можете включить следующие полезные опции в Настройки вкладка:
    Разрешить выполнение задачи по требованию
    Если запущенная задача не завершается по запросу, принудительно остановите ее
    Не запускайте новый экземпляр
  10. Сохраните настройки задачи. Убедитесь, что новая задача появилась в списке Планировщик задач оснастка. Щелкните задачу и выберите Запустить для проверки.
    Планировщик задач Код результата последнего запуска 0x0
    Если сценарий PowerShell был успешно запущен, в окне Last Run Result будет отображено соответствующее сообщение:
    The operation completed sucessfully (0x0).

    Для записи всех действий в текстовый файл журнала рекомендуется добавить в сценарий PowerShell простую функцию ведения журнала. Это позволит просматривать подробную информацию обо всех выполненных действиях в любой момент времени.
  11. Используйте функцию История На вкладке История можно просмотреть историю и результаты предыдущих запусков задач. История задач не сохраняется по умолчанию в планировщике задач (нажмите кнопку Включить историю всех задач ссылка в панели «Действия»).
    Просмотр истории запланированных задач

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

$TaskName="CheckOutlookMailbox"
$Trigger = New-ScheduledTaskTrigger -AtStartup
$Trigger.Repetition = (New-ScheduledTaskTrigger -once -at "12am" -RepetitionInterval (New-TimeSpan -Minutes 10) -RepetitionDuration (New-TimeSpan -Minutes 10)).repetition
$User= "NT AUTHORITY\SYSTEM"
$Action= New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-ExecutionPolicy Bypass -NonInteractive -WindowStyle Hidden -File C:\PS\Outlook_Email_to.ps1"
Register-ScheduledTask -TaskName $TaskName -Trigger $Trigger -User $User -Action $Action -RunLevel Highest -Force

При запуске сценариев PowerShell через планировщик задач Windows необходимо учитывать некоторые дополнительные моменты:

  • Чтобы запустить сценарий в среде PowerShell Core, выполните команду pwsh.exe вместо powershell.exe.
  • Если другие пользователи имеют доступ к компьютеру, на котором выполняется сценарий PowerShell, с привилегированными правами, убедитесь, что вы изменили разрешения доступа NTFS к файлу PS1, чтобы они не могли его изменить.
  • Если задача выполняется от имени непривилегированного пользователя, его учетная запись должна быть добавлена в локальную политику безопасности Войдите в систему как пакетное задание (gpedit.msc -> Конфигурация компьютера -> Настройки Windows -> Настройки безопасности -> Местная политика -> Назначение прав пользователя). При создании такого задания появится предупреждение:
    This task requires that the user account specified has Log on as batch job rights

    Для выполнения этого задания требуется, чтобы указанная учетная запись пользователя имела права Log on as batch job

  • В домене AD можно использовать GPO для запуска сценариев PowerShell при входе или выходе пользователя из системы, а также при запуске или выключении компьютера. Такие сценарии известны как сценарии входа в систему.