Разрешение планировщика задач Server 2008 R2 для сценария VBS
У меня есть скрипт VBS для создания резервных копий файлов базы данных MySQL с помощью команды MySQLDump. Это работает отлично и создает новую папку для ежедневных резервных копий (например, 20130110).
Тем не менее, сценарий также предназначен для очистки путем удаления папки старше x дней.
Когда я запускаю сценарий вручную, он работает отлично, но когда я настраиваю сценарий в планировщике задач и задаю для него значение "Запускать, вошел ли пользователь в систему или нет" (используя учетную запись администратора), задача завершается неудачей. Я считаю, что проблема заключается в разрешениях, но поскольку папки создаются задачей, они должны быть в состоянии удалить задачу.
Кстати, скрипт vbs использует команду FileSystemObject DeleteFolder для удаления...
Любой совет будет принят во внимание!
РЕДАКТИРОВАТЬ Это определенно команда FileSystemObject DeleteFolder это проблема. Я попытался установить папку, чтобы все, полные права, но все равно не радость...
2 ответа
Ответ таков:
При настройке действия вместо того, чтобы устанавливать "Программу / скрипт" для включения пути (например, "C:\Scripts\Backup.vbs"), вам необходимо установить "Программу / скрипт" как "Backup.vbs" и "Начать с" как "C:\Scripts\"
Скрипт теперь работает!
Спасибо http://www.blogfodder.co.uk/2012/4/20/win-2008-task-scheduler-with-return-code-1-0x1 за предложение...
Какова командная строка вашей задачи? Что представляет собой "Результат последнего запуска", созданный задачей? Есть ли какие-либо ошибки или предупреждения отображаются на вкладке "История"? У вас включен UAC, но вы не отметили опцию "Запускать с наивысшими привилегиями"?
Попробуйте добавить код отладки в ваш скрипт, чтобы изолировать ошибку. Лично я предпочитаю вход в журнал событий, чтобы избежать проблем с разрешениями файловой системы.
Set sh = CreateObject("WScript.Shell")
sh.LogEvent 4, "marker 1"
' your code here
sh.LogEvent 4, "marker 2"
' more of your code here
sh.LogEvent 4, "marker 3"
' ...
Это должно дать вам общее представление о том, какой раздел вашего кода является проблематичным. Как только вы нашли это, вы можете добавить более конкретный код отладки, например:
' some code
On Error Resume Next
' first instruction here
If Err Then ReportError "Error in 1st instruction"
' second instruction here
If Err Then Report Error "Error in 2nd instruction"
' ...
On Error Goto 0
' more code
Sub ReportError(txt)
CreateObject("WScript.Shell").LogEvent 1, txt & ": " & Err.Description _
& " (0x" & Hex(Err.Number) & ")"
WScript.Quit 1
End Sub