Разрешение планировщика задач 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
Другие вопросы по тегам