Назад | Перейти на главную страницу

Разрешение планировщика заданий Server 2008 R2 для сценария vbs

У меня есть сценарий vbs для создания резервных копий файлов базы данных MySQL с помощью команды MySQLDump. Это работает отлично и создает новую папку для ежедневных резервных копий (например, 20130110).

Однако сценарий также предназначен для наведения порядка путем удаления папки старше x дней.

Когда я запускаю сценарий вручную, он работает отлично, но когда я настраиваю сценарий в планировщике задач и устанавливаю для него значение «Запускать независимо от того, вошел ли пользователь в систему или нет» (с использованием учетной записи администратора), задача не выполняется. Я считаю, что проблема заключается в разрешениях, но поскольку папки создаются задачей, они должны быть удалены задачей.

Кстати, сценарий vbs использует команду FileSystemObject DeleteFolder для удаления ...

Любой совет будет принят во внимание!

ИЗМЕНИТЬ Это определенно проблема с командой FileSystemObject DeleteFolder. Я пробовал установить для папки все, полные права, но все равно без радости ...

Ответ такой:

При настройке действия вместо того, чтобы указывать "Программа / сценарий" для включения пути (например, "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