Задача планировщика висит в состоянии «Выполняется», а результата нет: как заставить её рассказать, что она делает

Что было. На Windows Server 2019 задача запускает .cmd-файл каждые 20 минут. В планировщике состояние «Выполняется», результата нет; вручную тот же файл отрабатывает за 10 минут. Иногда запуски накладываются и «висят» сутками.

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

Что рекомендовали (принятый ответ).

  1. Обернуть команду и писать лог. Действие задачи: программа cmd.exe, аргументы:
    /c C:\Scripts\job.cmd 1>>"C:\Scripts\Logs\job.log" 2>&1
    
    А в самом job.cmd первой и последней строками:
    @echo %date% %time% start
    ...
    @echo %date% %time% end rc=%errorlevel%
    
    После первого запуска по расписанию в логе будет видно, на чём остановилось (обычно «не найден путь», «доступ запрещён» или бесконечное ожидание нажатия клавиши).
  2. Запретить наложение: Параметры → «Если задача уже выполняется: Не запускать новый экземпляр». Иначе каждые 20 минут появляется ещё один висящий процесс.
  3. Ограничить время: «Останавливать задачу, выполняющуюся дольше: 1 час» и «Принудительно останавливать при неудачном завершении».
  4. Контекст. Задача без входа пользователя не видит подключённых дисков и не может показать окно: любой pause, msg, диалог «сохранить?» или программа с графическим интерфейсом ждёт вечно. Заменить буквы дисков на UNC-пути, убрать интерактивные шаги, для графических программ использовать режим без окон или другую утилиту.

Как разобрать уже висящую задачу. В диспетчере задач найти процесс по имени и посмотреть его командную строку и дерево дочерних процессов (tasklist /v или Process Explorer): чаще всего висит дочерний процесс, ожидающий ввода. taskkill /pid <PID> /t завершит дерево.

Про «10 минут вручную и сутки по расписанию». Кроме ожидания ввода, причина может быть в приоритете: задачи планировщика по умолчанию запускаются с пониженным приоритетом (7 в XML задачи). Для тяжёлых пакетных заданий экспортировать задачу, поставить <Priority>4</Priority> и импортировать обратно.

Планировщик описан в документации Microsoft.