Запуск forfiles.exe в качестве запланированной задачи завершился с кодом возврата 2147942401.

Вопрос или проблема

Я пытаюсь запускать forfiles.exe как запланированную задачу на полдюжине серверов, чтобы периодически удалять старые файлы журналов IIS. Я запускаю его от имени SYSTEM и настроил на выполнение с высшими привилегиями. Я также пробовал запускать его под своей учетной записью администратора, но тогда он тоже не работал. Я пробовал настраивать его как для Server 2008 R2, так и для Server 2019, но это не имеет значения.

Он запускает forfiles.exe (полный путь не имеет значения) с следующим аргументом:

Forfiles.exe -p C:\inetpub\logs\LogFiles\W3SVC1 -m *.log -d -30 -c "Cmd.exe /C del @path"

Однако я могу запустить его из командной строки/PowerShell без проблем (под своими учетными данными, я не пробовал запускать PowerShell от имени системы и проверять, но сомневаюсь, что это сделает разницу). Я также не вижу ошибок в журнале событий, за исключением раздела Планировщика заданий, который просто показывает код возврата 2147942401.

У кого-нибудь есть идеи?

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

Используйте полностью квалифицированный путь: C:\Windows\System32\forfiles.exe.

1- Откройте блокнот

2- Вставьте в него следующую строку кода:

start C:\Windows\System32\forfiles.exe -p "C:\inetpub\logs\LogFiles\W3SVC1" -s -m *.* -d -3 -c "cmd.exe /c del @path"

3- Сохраните файл с расширением .bat, например steve-freeman.bat

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

5- Во вкладке действия выберите ваш пакетный файл.

enter image description here

Это всё!

Ну, я разобрался, и мне стыдно. Я скопировал аргументы forfiles.exe с веб-сайта и просто внес необходимые изменения (в основном я изменил его на 30 дней). Но каким-то образом, когда это было вставлено в запланированную задачу, или, возможно, в результате чего-то еще, кавычки ВЫГЛЯДЕЛИ нормально, но были другим типом символа. Я заметил это только когда добавил echo к команде, и вывод выглядел абсолютно испорченным. Кавычки в выводе выглядели как строчная О с акцентом сверху. Я заменил их на настоящие кавычки, попробовал снова, и всё сработало идеально.

Ответ или решение

Запуск forfiles.exe через планировщик заданий может столкнуться с рядом технических проблем, особенно при использовании в качестве задачи для очистки старых лог-файлов IIS на серверах под управлением Windows Server 2008 R2 и Server 2019. В описанной вами ситуации основная проблема заключается в ошибке выполнения задачи, возвращающей код 2147942401. Давайте разберем возможные причины и решение данной проблемы, используя подход TEA (Теория, Пример, Применение).

Теория

  1. Код ошибки 2147942401: Этот код указывает на "Ошибка доступа". Это может указывать на проблемы с разрешениями выполнения или правами на объекты файловой системы.

  2. Планировщик заданий Windows: При выполнении задач через планировщик необходимо учитывать, что переменные среды пользователя, такие как пути к исполняемым файлам и системные переменные, могут быть недоступны, поскольку планировщик не имеет профиля пользователя.

  3. Системные права: Запуск задач от имени SYSTEM — это хороший шаг, так как этот аккаунт имеет расширенные права, но даже это может не решить проблему, если есть проблемы на уровне файловой системы или синтаксиса команд.

Пример

Как вы уже заметили, в разных конфигурациях происходит неудачный запуск forfiles.exe через планировщик, тогда как ручной запуск команды работает без ошибок:

Forfiles.exe -p C:\inetpub\logs\LogFiles\W3SVC1 -m *.log -d -30 -c "Cmd.exe /C del @path"

Это указывает на возможные проблемы с передачей аргументов — в данном случае неправильные символы кавычек могут вызвать синтаксическую ошибку.

Применение

  1. Полные пути: Все пути и команды в планировщике заданий должны быть полными. Убедитесь, что forfiles.exe вызывается с полным путем: C:\Windows\System32\forfiles.exe.

  2. Правильные кавычки: Убедитесь, что используете стандартные двойные кавычки ("). Именно это вызвало проблемы в вашем сценарии — неверные символы кавычек.

  3. Использование .bat файла: Создайте файл .bat, чтобы гарантировать, что командная последовательность выполняется корректно. Это помогает обойти проблемы с форматированием и точно определить коды ошибки.

Пример:

@echo off
start C:\Windows\System32\forfiles.exe -p "C:\inetpub\logs\LogFiles\W3SVC1" -m *.log -d -30 -c "cmd.exe /c del @path"

Сохраняя содержимое в .bat файл и запускайте его через планировщик заданий.

  1. Проверка прав доступа: Убедитесь, что аккаунт, под которым выполняется задача (SYSTEM или другой), имеет необходимые права доступа на выполнение операций удаления в указанной директории. Можно временно логгировать вывод ошибок для точной диагностики.

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

  3. Логи: Рекомендуется добавить логи командного файла для лучшего понимания вызовов и возвращаемых сообщений об ошибках. Это значительно облегчает диагностику в будущем.

Таким образом, внимательно пройдя через отладочные шаги, можно решить проблему с ошибкой при запуске scheduled task на forfiles.exe. Данные мероприятия также укрепят вашу инфраструктуру и минимизируют будущие проблемы с планировщиком задач.

Оцените материал
Добавить комментарий

Капча загружается...