Ошибка сценария резервного копирования PowerShell MySQL в планировщике заданий 0x00041301

Я создал следующий сценарий PowerShell.

$root = 'C:\Backups\My Website\Database Dumps\'

$dateString = (Get-Date).ToString("yyyy-MM-dd")

$fileName = $dateString + "-MyWebsiteDbBackup.sql"

$backupFilePath = ($root + $fileName)

$command = ("mysqldump -u root wpdatabase > " + "`"$backupFilePath`"")

Write-Host $command

Invoke-Expression $command

Предполагается, что его функция заключается в ежедневном резервном копировании базы данных MySQL для моего веб-сайта WordPress.

Когда я запускаю сценарий в PowerShell ISE, он работает нормально, и файл дампа MySQL создается без проблем.

Однако в планировщике заданий он завис при запуске с кодом 0x00041301.

Для учетных данных я использую метод my.cnf, описанный здесь. И я поставил задачу запускаться независимо от того, вошел ли пользователь в систему или нет.

ОБНОВЛЕНИЕ КОДА

На основе ответа vonPryz.

$root = 'C:\Backups\My Website\Database Dumps\'

$dateString = (Get-Date).ToString("yyyy-MM-dd")

$fileName = $dateString + "-MyWebsiteDbBackup.sql"

$backupFilePath = ($root + $fileName + " 2>&1")

$command = ("mysqldump -u root wpdatabase > " + "`"$backupFilePath`"")

Write-Host $command

$output = Invoke-Expression $command 

$output | Out-File C:\mysqlBackupScriptOutput.txt

Теперь это дает мне сообщение об ошибке illegal character in path

Что я делаю не так?


person J86    schedule 01.08.2016    source источник
comment
В качестве примечания: $dateString = (Get-Date).ToString("yyyy-MM-dd") было бы более читабельно.   -  person vonPryz    schedule 01.08.2016
comment
Спасибо, вы правы. Я обновлю это до этого.   -  person J86    schedule 01.08.2016
comment
Удалите 2>&1 из строки, которую вы назначаете $backupFilePath, и посмотрите, по-прежнему ли вы получаете недопустимые символы (› — недопустимый символ пути).   -  person Keith Hill    schedule 02.08.2016
comment
@KeithHill это то, что это предполагает Да.   -  person J86    schedule 03.08.2016
comment
Здесь вы делаете немного больше - в частности, вы заключаете $backupFilePath в кавычки, чтобы вся строка (включая 2›&1) отображалась как часть имени файла. Во всяком случае, это моя теория.   -  person Keith Hill    schedule 04.08.2016


Ответы (1)


Код планировщика заданий 0x00041301 означает что задача запущена. Вероятно, это означает, что mysqldump что-то подсказывает. Может быть, пароль или какой-то диалог подтверждения. Под какой учетной записью пользователя выполняется задача?

Для отладки вам нужно захватить вывод процесса, чтобы увидеть, что происходит. Попробуйте использовать Tee-Object для отправки копии в файл.

person vonPryz    schedule 01.08.2016
comment
Спасибо, Вон, если я сделаю это в конце Invoke-Expression $command | Tee-Object -FilePath "C:\commandoutput.txt" | Out-Null, будет ли создан этот текстовый файл? Или мне нужно сначала установить это? - person J86; 01.08.2016
comment
Нет, похоже, что нет. Сначала попробую создать файл. - person J86; 01.08.2016
comment
Хорошо, это тоже не помогло. commandoutput.txt был пуст после того, как я запустил задачу! - person J86; 01.08.2016
comment
@Ciwan Хм, а как насчет использования 2>&1 для отправки stderr в stdout? Избавьтесь и от |out-null, так как это создает ненужную сложность. - person vonPryz; 01.08.2016
comment
Как только я поместил его в переменную $output, что дальше? Как бы я написал это в файл? Я думаю, что Tee-Object не так делает? - person J86; 01.08.2016
comment
Я думаю, что понял, как вывести переменную в файл, но получаю другую ошибку в отношении 2>&1, см. обновленный Q. - person J86; 01.08.2016