Я пытаюсь запустить командный файл в Windows 7 из Планировщика заданий. Я могу запустить командный файл нормально, если я запустил его из командной строки.
Если я запустил его из планировщика задач, чтобы он запускался только тогда, когда пользователь вошел в систему, задача будет выполняться без каких-либо проблем. Однако, когда он запускается, когда пользователь не вошел в систему, планировщик задач выглядит так, как будто он запускает файл, но ничего не происходит.
Я попытался изменить пакетный файл только на следующую строку, чтобы убедиться, что это не из-за того, что находится в пакетном файле:
echo "success" >> c:\temp\test.log
и это не работает. Любые идеи? У меня он запускается с наивысшими привилегиями и с учетной записью администратора, которая имеет полные разрешения на пакетный файл и папку, в которую файл записывается.
Свойства планировщика заданий. . .
Из Windows Task Scheduler
на работе Properties
(см. самые нижние снимки экрана) в. . .
1. General
на вкладке, убедитесь, что следующие параметры выбраны / отмечены или не отмечены, как показано на Печать экрана A
Run only when user is logged on
Run whether user is logged on or not
Run with the highest privileges
2. Conditions
вкладку, убедитесь, что следующие параметры Выбрать, проверил, или не отмечен как показано на Печать экрана B
Wake the computer to run this task
3. Actions
вкладку, щелкните Edit
, и убедитесь, что Start in (optional)
устанавливается так же, как показано в примере ниже (НЕ заключите его в двойные кавычки) для полного пути, указывающего, где находится пакетный скрипт БЕЗ последняя обратная косая черта "\
" Печать экрана C
Как только вы нажмете OK
(2. выше) он должен запросить учетные данные для запуска этого как, и эти учетные данные - это то, к чему потребуется доступ EXECUTE
пакетный файл там, где он существует, и ему также потребуется доступ, чтобы делать то, что запускает пакетный файл, который вы написали по сценарию.
Возможно, лучше всего настроить для этого процесса статическую учетную запись пользователя службы / прокси, а затем использовать ее учетные данные для запуска процесса. Вам нужно будет убедиться, что его пароль надежен и не истекает срок его действия, и ему нужен доступ к EXECUTE
пакет и запускать независимо от запущенного процесса пакетного сценария, любых команд и ресурсов и т. д. он также использует.
Вроде вариант Run whether user is logged on or not
вы ДОЛЖНЫ проверить опцию Run with highest privileges
чтобы он действительно запускался, как ожидалось от планировщика заданий.
Проверка ошибок
Если есть проблема с фактическим пакетным скриптом, но Windows Диспетчер задач на самом деле выполняет его для запуска, но логические ошибки пакетного сценария и т. д. по какой-либо причине Диспетчер задач может не увидеть этот сбой на этом уровне. С его точки зрения (по умолчанию большую часть времени) он выполняет командный файл, поэтому, пока он может его выполнять и имеет доступ для этого, его работа выполняется успешно.
Добавить проверка ошибок или протоколирование к логике пакетного сценария, чтобы поймать (или устранять неполадки) на этом уровне, включая обеспечение того, чтобы контекст безопасности, который выполняет пакетный планировщик, имел соответствующий доступ к командам, ресурсам и т. д., под которыми запускается пакетный сценарий.
ПРОВЕРИТЬ ПОЛИТИКУ ГРУППЫ И ВОЙДИТЕ В КАЧЕСТВЕ РАЗРЕШЕНИЙ НА ГРУППУ
Ответ: В Windows эта привилегия предоставляется через Местный или Политика безопасности домена. Для этого с помощью Политика локальной безопасности, Следуй этим шагам.
- в Панель управления, открыто Инструменты управления, затем Местная безопасность Политика.
- Под Настройки безопасности, открыто Местная политика и выделить Распределение прав пользователей.
- Найдите Войдите в систему как пакетное задание. Открой свойства и добавьте всех пользователей, которым это право нужно.
- Когда закончите, спасти ваши изменения и закройте Настройки локальной безопасности окно.
Ваши изменения должны немедленно вступить в силу. Чтобы внести изменения в политику безопасности домена, на контроллере домена используйте Утилита политики безопасности домена в Панель управления
Если ваш сценарий ссылается на подключенный сетевой диск, но вы хотите, чтобы он Run whether the user is logged on or not
, то в этом контексте сопоставление дисков может фактически отсутствовать, чтобы пакетный процесс выполнял ожидаемые действия.
Если возможно, используйте UNC
пути в логике пакетного сценария, а не буква подключенного диска, чтобы избежать проблем. В противном случае вам может потребоваться использовать PUSHD \\ServerName\ShareName
в начале пакетного процесса, а затем используйте POPD
в конце пакетного процесса. Вы можете отобразить диск с помощью NET USE X: \\ServerName\ShareName
в начале пакетного процесса, а затем отсоедините привод с помощью NET USE X: /DELETE
в конце пакетного процесса.
Посмотрите на запланированное задание Settings
вкладка и параметр, указанный как Stop the task if it runs longer than:
. Если этот параметр установлен, а период времени меньше, чем у запущенного сценария, планировщик задач убьет его раньше, и, таким образом, вы можете не получить ожидаемых результатов. Это еще что проверить при устранении неполадок на всякий случай.
Из Triggers
вкладка запланированной задачи при выборе Edit
вариант обязательно установите Start:
время и дата имеют значение, которое еще НЕ было передано. Убедитесь, что для этого установлены дата и время, соответствующие значениям в Будущее. В противном случае вы можете заметить, что в задании указано, что оно запланировано для запуска в следующее запланированное время, как и следовало ожидать; однако он не выполняется Диспетчер задач и не Диспетчер задач History
tab показывает, что он когда-либо выполняется (потому что это не так). Просто отредактируйте триггер и обновите его, указав дату и / или время в будущем, чтобы решить эту проблему, если она у вас возникла.
ПЕЧАТЬ ЭКРАНОВ
Печать экрана A
Печать экрана B
Печать экрана C