Задача планировщика с повтором «бесконечно» на Windows Server 2019 и 2022 назначает следующий запуск, но не запускается: используйте триггер «Однократно»

Что было. Задача с триггером «Ежедневно» и параметром «Повторять каждые 5 минут в течение: бесконечно» на Windows Server 2019 показывает корректное «Время следующего запуска», это время наступает, поле «Время последнего запуска» не меняется, программа не выполняется, ошибок в истории нет. На Windows Server 2012 и 2008 та же задача работала годами. Тема собрала более двадцати подтверждений на 2019, 2022 и клиентских системах.

Что помогло (подтверждено многими). Сменить триггер:

  • Триггер: «По расписанию» → «Однократно», дата и время в прошлом или ближайшее.
  • Дополнительные параметры: «Повторять задачу каждые: 5 минут», «в течение: бесконечно».
    Такая задача повторяется без ограничений. Второй вариант, работавший до осенних обновлений 2023 года: «Ежедневно» с повтором каждые N минут «в течение: 1 день»; после обновлений участники сообщали, что надёжно работает только «Однократно». Официального исправления или объяснения производитель в теме не дал.

Почему так. Логика вычисления следующего запуска для повторяющихся триггеров изменилась начиная с 2019; комбинация «ежедневно + бесконечно» приводит к тому, что служба рассчитывает время, но не ставит задачу в очередь. Это выглядит как «висит в состоянии Готово».

Как переделать существующие задачи скриптом (если их много):

Get-ScheduledTask | Where-Object { $_.Triggers | Where-Object { $_.Repetition.Duration -eq '' -and $_.CimClass.CimClassName -eq 'MSFT_TaskDailyTrigger' } } |
  Select TaskPath, TaskName

покажет кандидатов; для каждой задачи создать новый триггер New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Minutes 5) и Set-ScheduledTask -Trigger.

Как проверять любую задачу после изменений. Включить историю («Включить журнал всех задач» в правой панели), дождаться двух интервалов и посмотреть события 100/102 (запуск/завершение) и 107 (сработал триггер). Если 107 есть, а 100 нет, дело в условиях запуска (питание, простой, сеть); если нет и 107, дело в триггере.

Замечание про «бесконечно» вообще. Для задач, которые должны работать постоянно с интервалом в минуты, часто лучше служба (или скрипт с циклом под nssm/собственной службой), чем планировщик: нет накладных расходов на запуск процесса, проще контролировать одиночный экземпляр и логировать.

Типы триггеров описаны в документации Microsoft.