Выполните следующие шаги, чтобы устранить неполадки и решить вашу проблему
Свойства планировщика задач. , ,
Из Task Scheduler
Windows о свойствах задания (см. Большинство снимков экрана внизу) в. , ,
1. На вкладке Общие убедитесь, что нижеперечисленные параметры выбраны / отмечены или не отмечены, как показано на экране печати A
- Снимите флажок
Run only when user is logged on
- Проверьте
Run whether user is logged on or not
- Проверьте
Run with the highest privileges
2. Условия Вкладка, убедитесь , что приведенные ниже варианты выбора, чек, или незарегистрированный так же , как показано на Print Screen B
- Установите
Wake the computer to run this task
3. На вкладке « Действия » нажмите « Изменить» и убедитесь, что параметр « Start in (optional)
установлен точно так же, как показано в примере ниже (НЕ ставьте двойные кавычки вокруг него) для полного пути, указывающего, где находится пакетный скрипт, БЕЗ окончательной обратной косой черты » \
" Экран печати C
СООБРАЖЕНИЯ БЕЗОПАСНОСТИ
Как только вы нажмете OK (2. выше), он должен запросить у вас учетные данные для запуска этого файла, и именно эти учетные данные потребуют доступа к EXECUTE
пакетного файла там, где он существует, и ему также потребуется доступ для выполнения любого пакетного файла. работает, что вы сценарий.
Для этого процесса лучше всего настроить статическую учетную запись пользователя службы / прокси, а затем использовать ее учетные данные для запуска процесса. Вам нужно убедиться, что его пароль надежный, и он настроен так, что срок его действия не истечет, и ему нужен доступ для EXECUTE
пакета и запуска независимо от того, запущен ли пакетный сценарий и какие команды и ресурсы, и т.д. он также использует.
Кажется, что опция Run whether user is logged on or not
вы ДОЛЖНЫ проверить опцию Run with highest privileges
чтобы он действительно работал так, как ожидалось от планировщика задач.
Проверка ошибок
Если есть проблема с фактическим пакетным сценарием, но планировщик задач Windows фактически выполняет его, чтобы запустить его, но логика пакетного сценария выдает ошибки и т.д. По какой-либо причине, планировщик задач может не увидеть этот сбой на этом уровне. С его точки зрения (по умолчанию большую часть времени) он выполняет командный файл, поэтому, пока он может его выполнять и имеет доступ к нему, его работа выполняется успешно.
Добавьте проверку ошибок или ведение журнала в логику пакетного сценария, чтобы выявить (или устранить неисправности) проблемы на этом уровне, включая обеспечение того, чтобы контекст безопасности, в котором его выполняет пакетный планировщик, имел соответствующий доступ к командам, ресурсам и т.д., К которым запускается пакетный сценарий.
Вопросы групповой политики
ПРОВЕРЬТЕ ПОЛИТИКУ ГРУППЫ И ВХОДИТЕ КАК РАЗРЕШЕНИЕ НА РАБОТУ
Ответ. В Windows эта привилегия предоставляется через локальную политику или политику безопасности домена.Чтобы сделать это с помощью локальной политики безопасности, выполните следующие действия.
- На панели управления откройте Администрирование, затем Локальная политика безопасности.
- Под настройками безопасности откройте Локальные политики и выделите Назначение прав пользователя.
- Найдите Вход в систему как пакетное задание. Откройте свойства и добавьте пользователей, которым необходимо это право.
- Когда закончите, сохраните ваши изменения и закройте окно Local Security Settings.
Ваши изменения должны вступить в силу немедленно. Чтобы внести изменения в Политику безопасности домена, на контроллере домена используйте утилиту Политики безопасности домена в Панели управления.
Логика пакетного сценария с подключенными дисками или полным UNC-путем и проблемы. , ,
Если ваш сценарий ссылается на подключенный сетевой диск, но вы хотите, чтобы он Run whether the user is logged on or not
, то в этом контексте сопоставление дисков может фактически отсутствовать, чтобы пакетный процесс мог выполнить то, что ожидалось.
Если возможно, используйте пути UNC
в логике пакетного сценария, а не букву подключенного диска, чтобы избежать проблем. В противном случае вам может понадобиться использовать PUSHD \\ServerName\ShareName
в начале пакетного процесса, а затем использовать POPD
в конце пакетного процесса. Вы можете сопоставить диск с помощью NET USE X: \\ServerName\ShareName
в начале пакетного процесса, а затем отключить диск с помощью NET USE X: /DELETE
в конце пакетного процесса.
Экраны печати
Экран печати A
Экран печати B
Экран печати C
Примеры пакетных скриптов WinSCP
Ниже приведены два очень простых и полных примера сценария FTP для загрузки и сценария FTP для загрузки с FTP-сервера с использованием WinSCP.com
. Убедитесь, что в переменной SET winscplogin=
указано имя FTP-соединения, которое вы определили из графического интерфейса WinSCP.
Таким образом, сценарий создается динамически, и вы создаете команды FTP из пакетного сценария, но вы также можете просто указать его на статический сценарий WinSCP с командами FTP в них, в противном случае это тоже легко установить.
Загрузить на FTP-сервер
@ECHO ON
SET logfile=C:\folder\path\log.log
::SET WinSCP variables, etc.
SET prgwinscp="C:\Program Files\WinSCP3\WinSCP.com"
SET winscplogin="ABC Company"
SET winscpfile=C:\folder\path\ABCompany_FTP_OUT_WinSCP.txt
IF EXIST "%winscpfile%" DEL /Q /F "%winscpfile%"
:ftpout
ECHO. >> "%logfile%"
ECHO *******************FTP OUT******************* >> "%logfile%"
ECHO Delivering file(s) to ABC Company FTP server >> "%logfile%"
SET ftpdir="ToABC"
ECHO option batch on >> %winscpfile%
ECHO option confirm off >> %winscpfile%
ECHO option transfer binary >> %winscpfile%
ECHO open %winscplogin% >> %winscpfile%
ECHO cd %ftpdir% >> %winscpfile%
ECHO put "C:\Folder\Path\*.*" >> %winscpfile%
ECHO dir >> %winscpfile%
ECHO close >> %winscpfile%
ECHO exit >> %winscpfile%
ECHO %winscpfile% >> "%logfile%"
TYPE %winscpfile% >> "%logfile%"
ECHO - - - - - - - - - - - - - - - - - - - - - - >> "%logfile%"
%prgwinscp% /script=%winscpfile% >> "%logfile%"
ECHO - - - - - - - - - - - - - - - - - - - - - - >> "%logfile%"
IF EXIST "%winscpfile%" DEL /Q /F "%winscpfile%"
ECHO Transmission complete >> "%logfile%"
Скачать с FTP-сервера
@ECHO ON
SET logfile=C:\folder\path\log.log
::SET WinSCP variables, etc.
SET prgwinscp="C:\Program Files\WinSCP3\WinSCP.com"
SET winscplogin="ABC Company"
SET winscpfile=C:\folder\path\ABCompany_FTP_IN_WinSCP.txt
IF EXIST "%winscpfile%" DEL /Q /F "%winscpfile%"
:ftpin
ECHO. >> %logfile%
ECHO *******************FTP IN******************* >> %logfile%
ECHO Retrieving files from ABC Company server >> %logfile%
SET ftpdir="FromABC"
ECHO option batch on >> %winscpfile%
ECHO option confirm off >> %winscpfile%
ECHO option transfer binary >> %winscpfile%
ECHO open %winscplogin% >> %winscpfile%
ECHO cd %ftpdir% >> %winscpfile%
ECHO ls >> %winscpfile%
ECHO get "*.*" "C:\Folder\path\" >> %winscpfile%
ECHO close >> %winscpfile%
ECHO exit >> %winscpfile%
ECHO %winscpfile% >> %logfile%
TYPE %winscpfile% >> %logfile%
ECHO ------------------------------------------- >> %logfile%
%prgwinscp% /script=%winscpfile% >> %logfile%
ECHO ------------------------------------------- >> %logfile%
IF EXIST "%winscpfile%" DEL /Q /F "%winscpfile%"
ECHO FTP Downloading Complete >> %logfile%
ECHO Transmission complete >> %logfile%
Пользовательские примеры скриптов
При планировании пакетного сценария обязательно используйте обе опции « Выполнить» независимо от Run whether user is logged on or not
Run with the highest privileges
. После того, как вы примените эти изменения, вам нужно будет ввести учетные данные, чтобы выполнить задачу в явном виде. Обязательно используйте учетную запись, которая имеет доступ к файлу C:\Program Files (x86)\WinSCP\WinSCP.com
и также отвечает другим общим требованиям, перечисленным выше.
Если у вас все еще есть проблемы и вы хотите подтвердить, что это не связано с безопасностью ОС, создайте новую локальную учетную запись на компьютере и задайте для нее надежный пароль, установите для нее никогда не истекать срок действия и разрешите запуск в качестве пакетных разрешений. Вы также можете сделать его локальным администратором и протестировать, чтобы узнать, имеет ли какое-либо значение предоставление учетной записи локального администратора на машине.
Это будет означать, что у вас есть два файла: пакетный скрипт и WinSCP. Пакетный скрипт передаст скрипт WinSCP на WinSCP.com, и вы можете просто выполнить его, чтобы запустить процесс. Убедитесь, что этот сценарий работает как тот же пользователь, когда он вошел в систему, просто выполнив его для тестирования, а затем протестировать с той же учетной записью, когда он вошел в систему на сеансе компьютера с параметром Run only when user is logged on
чтобы подтвердить, что он работает и из планировщика задач перед тем, как установить его на работу, независимо от того, вошли вы в систему или нет
На вкладке Actions
планировщика заданий будет использоваться только поле « Program/Script:
при этом все остальные поля будут оставлены пустыми, а поле « Program/Script:
будет иметь значение C:\folder\path\yourbatchscript.cmd
.
Пакетный скрипт
@ECHO ON
SET prgwinscp="C:\Program Files (x86)\WinSCP\WinSCP.com"
%prgwinscp% /script=lock-arch.winscp
EXIT
Скрипт WinSCP
open sftp://charles@192.168.0.1:2222/ -hostkey="ssh-rsa 2048
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
call cinnamon-screensaver-command -d
close
exit