Что было. На Windows Server 2019 задача планировщика запускает bat-файл, копирующий файлы с сетевого диска в локальную папку. В режиме «Выполнять только для вошедшего пользователя» всё работает. При переключении на «Выполнять для всех пользователей» (без входа) задача отчитывается об успешном завершении, а файлы не копируются. Иногда в столбце результата появляется 0x1.
Почему. Без интерактивного входа задача работает в неинтерактивной сессии: у неё нет подключённых сетевых дисков (буквы дисков привязаны к сессии пользователя), нет пользовательских переменных окружения, а текущий каталог не тот, что вы ожидаете. Скрипт запускается, не находит Z:\, выходит с кодом 1, планировщик считает запуск успешным (задача-то запустилась).
Что рекомендовали.
- UNC-пути вместо букв дисков:
\\server\share\folderпрямо в скрипте. Если нужны учётные данные к общему ресурсу, подключать их в скрипте:net use \\server\share /user:..., а в концеnet use \\server\share /delete. Пароль в открытом виде в bat-файле плохая практика; лучше учётная запись задачи, у которой уже есть права на ресурс. - Правильное заполнение действия: в поле «Программа или сценарий» только имя файла или полный путь к нему, в поле «Рабочая папка» полный путь к каталогу скрипта. По отзывам участников, это самая частая правка, которая решает вопрос: относительные пути в скрипте начинают работать.
- Права и параметры задачи: «Выполнить с наивысшими правами»; учётная запись имеет доступ и к источнику, и к назначению; у неё есть право «Вход в качестве пакетного задания» (Log on as a batch job) в локальной политике; пароль сохранён (при смене пароля задача перестаёт запускаться).
- Журнал планировщика: включить историю задач и смотреть события 201 («действие завершено») с кодом возврата, а также 101/103, если запуск не удался.
Как быстро отладить. Добавить в начало скрипта cd /d %~dp0 и вывод в файл: >> C:\logs\task.log 2>&1. Первый же запуск покажет, чего не хватает: «Системе не удаётся найти указанный путь» и имя пути.
Про 0x1. Это код возврата вашего скрипта, а не планировщика. Малые значения означают ошибку внутри bat-файла; коды вида 0x800… уже ошибки самого планировщика (0x80070005 нет прав, 0x8007010B неверная рабочая папка).
Диагностика незапускающихся задач описана в документации Microsoft.