2016-08-01 1 views
0

J'ai créé le script PowerShell suivant.Erreur de script de sauvegarde MySQL PowerShell dans le planificateur de tâches 0x00041301

$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 

Sa fonction est censée faire une sauvegarde quotidienne d'une base de données MySQL pour mon site WordPress. Lorsque je lance le script dans PowerShell ISE, il fonctionne correctement et le fichier de vidage MySQL est créé sans problème. Toutefois, dans Task Scheduler, il était bloqué en cours d'exécution avec un code 0x00041301.

Pour les informations d'identification, j'utilise la technique my.cnfdescribed here. Et j'ai défini la tâche à exécuter si un utilisateur est connecté ou non.

CODE MISE À JOUR

Sur la base de la réponse de 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 

Cela me donne maintenant une erreur en disant illegal character in path

Qu'est-ce que je fais mal?

+1

En note: '$ dateString = (Get-Date) .ToString (" aaaa-MM-jj ")' serait plus lisible. – vonPryz

+0

Merci, vous avez raison. Je vais le mettre à jour à cela. – Ciwan

+0

Supprimez les '2> & 1' de la chaîne que vous affectez à $ backupFilePath et voyez si vous avez toujours des caractères illégaux (> est un chemin illégal). –

Répondre

0

Le code du planificateur de tâches 0x00041301means indique que la tâche est en cours d'exécution. Cela signifie probablement que mysqldump demande quelque chose. Peut-être un mot de passe ou une boîte de dialogue de confirmation. Quel compte d'utilisateur est la tâche exécutée? Pour déboguer, vous devez capturer la sortie du processus pour voir ce qui se passe. Essayez d'utiliser Tee-Object pour envoyer une copie dans un fichier.

+0

Merci Von, si je fais cela à la fin 'Invoke-Expression $ command | Tee-Object -FilePath "C: \ commandoutput.txt" | Out-Null' va-t-il créer ce fichier texte? Ou dois-je avoir cela en place en premier? – Ciwan

+0

Non, il semble que non. Je vais essayer de créer le fichier en premier. – Ciwan

+0

Ok, ça n'a pas aidé non plus. Le 'commandoutput.txt' était vide après avoir exécuté la tâche! – Ciwan