У меня есть сценарий 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