Windows Server 2012 не выполняет пакетный файл правильно из запланированной задачи.

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

У меня есть пакетный файл, который всего лишь состоит из 3 строк.

Что он делает, довольно просто:

type C:\data\file.bak >> echo "" >> file.log.bak

cscript "C:\data\Move filesA.vbs"
cscript "C:\data\Move filesB.vbs"

В основном он просто берет file.bak и добавляет его в file.log.bak. Это обычные текстовые файлы.

Скрипты перемещают file.bak на серверное расположение.

Строка type C:\data\file.bak >> echo "" >> file.log.bak была добавлена всего несколько часов назад. Скрипт выполняется каждые 15 минут.

Когда его запускает пользователь (двойным кликом по .bat файлу), он работает нормально и копирует файл в file.log.bak без проблем.

Когда он запускается из задания, строка type C:\data\file.bak >> echo "" >> file.log.bak не выполняется, но выполняются cscripts.

Единственная моя догадка – это то, что в Windows есть кэшированная версия пакетного файла, и он не выполняет новый пакетный файл.

Есть ли какие-либо подсказки относительно того, почему строка type C:\data\file.bak >> echo "" >> file.log.bak не выполняется при запуске из запланированного задания?

Убедитесь, что запланированное задание запускается в директории.

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

Дважды щелкните на запланированном задании (или нажмите свойства), перейдите на вкладку “Действия”, затем отредактируйте действие(я). Оттуда вы увидите всплывающее окно с полем “Запустить в (необязательно)”. Укажите директорию, в которой находится скрипт (или в какой директории вы хотите его запускать).

Всплывающее окно для изменения директории запуска

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

Если у вас возникла проблема с выполнением пакетного файла из запланированной задачи в Windows Server 2012, с вероятными трудностями в запуске инструкции type, давайте рассмотрим возможные причины и решения, чтобы помочь вам разобраться в этой ситуации.

1. Причины проблемы

a) Различия в контексте выполнения

Когда вы запускаете пакетный файл вручную (дважды щелкнув на нем), он выполняется в контексте вашей сессии пользователя. Однако, когда его запускает Планировщик задач, он может использовать другую учетную запись или даже системную учетную запись (например, Local System). Это может повлиять на доступ к файлам и папкам.

b) Путь выполнения

Если ваш пакетный файл зависит от относительных путей, важно указать абсолютный путь к директории, в которой он должен выполняться. Поскольку контекст выполнения не всегда совпадает с местом расположения файла, это может привести к сбоям в выполнении команд.

c) Права доступа

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

2. Решения

a) Указание рабочей директории

Как упоминалось, когда вы редактируете задачу в Планировщике, укажите поле "Start in (optional)" с путем к директории, где находится ваш пакетный файл. Это обеспечит, что все команды выполняются именно из той директории, где вы ожидаете.

  1. Откройте Планировщик задач.
  2. Найдите вашу задачу и откройте её свойства.
  3. Перейдите на вкладку Actions (Действия).
  4. Выберите действие, нажмите Edit (Изменить).
  5. В поле "Start in" укажите путь к директории, в которой находится ваш пакетный файл.

b) Проверка прав доступа

Перейдите в свойства файлов и папок и убедитесь, что учетная запись, используемая для запланированной задачи, имеет доступ к C:\data\file.bak, C:\data\Move filesA.vbs и C:\data\Move filesB.vbs. При необходимости предоставьте соответствующие права.

c) Запись журналов для отладки

Добавьте в ваш пакетный файл команды для записи в журнал выполнения, чтобы отслеживать, на каком шаге возникает проблема. Например, добавьте строки для записи вывода и ошибок в отдельный файл:

@echo off
echo >> C:\data\log.txt "Запуск скрипта: %date% %time%"
type C:\data\file.bak >> C:\data\file.log.bak 2>> C:\data\log.txt
if %errorlevel% neq 0 echo Ошибка при выполнении type >> C:\data\log.txt
cscript "C:\data\Move filesA.vbs" >> C:\data\log.txt 2>> C:\data\log.txt
cscript "C:\data\Move filesB.vbs" >> C:\data\log.txt 2>> C:\data\log.txt

3. Проверка кэша

Хотя вероятность того, что Windows использует кэшированную версию пакетного файла, крайне мала, вы можете попробовать создать новый пакетный файл с другим именем для тестирования. Это исключит возможность проблем с кэшированием.

Заключение

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

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

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