2 votes

Comment afficher un message d'erreur si invoke-webrequest a échoué en raison d'une URL invalide/expirée, sinon poursuivre le téléchargement dans Powershell CLI?

Je veux utiliser une commande powershell à l'intérieur d'un fichier batch pour télécharger un fichier.

Mon code ressemble à ça et fonctionne juste pour télécharger le fichier depuis cette URL spécifique :

powershell "$progresspreference='silentlycontinue'; wget -uri "https://thisismyurl.com/123456" -outfile '%userprofile%\Downloads\file.zip'"

Maintenant je veux implémenter echo download failed! url is invalid. & pause & goto label si le invoke-webrequest a échoué en raison d'une URL invalide ou expirée.

Aussi, étant donné que les commandes powershell à l'intérieur du fichier batch deviennent assez longues, y a-t-il un moyen de diviser les commandes ?

J'ai essayé

powershell "$progresspreference='silentlycontinue' `
wget -uri "https://thisismyurl.com/123456" -outfile '%userprofile%\Downloads\file.zip'"

mais cela n'a pas fonctionné.

2voto

mklement0 Points 12597
  • Vous utilisez powershell.exe, l'interface en ligne de commande de Windows PowerShell, avec le paramètre -Command implicite, ce qui signifie que le code de sortie de powershell.exe est déterminé par la réussite de la dernière instruction de la chaîne de commandes : 0 en cas de réussite, 1 sinon.

    • Dans Windows PowerShell, wget est un alias du cmdlet Invoke-WebRequest, et, comme pour tout cmdlet, en cas d'erreur lors de son exécution, son état de réussite est considéré comme $false et donc se traduit par le code de sortie 1.

    • Ainsi, vous pouvez simplement utiliser l'opérateur || de cmd.exe pour agir dans le cas où le code de sortie de powershell.exe est non nul.

  • Pour des appels à l'interface en ligne de commande PowerShell sur plusieurs lignes à partir d'un fichier batch, consultez cette réponse. En bref : vous ne pouvez pas utiliser une enveloppe globale "..." et devez donc échapper les caractères sélectionnés avec ^, et vous devez terminer chaque ligne intérieure par ^

Pour mettre tout cela ensemble dans le contexte de votre code :

@echo off & setlocal

powershell $progresspreference='silentlycontinue'; ^
  wget -uri 'https://thisismyurl.com/123456' ^
       -outfile '%userprofile%\Downloads\file.zip' ^
  || (echo téléchargement échoué ! L'URL est invalide. & pause & goto label)

exit /b 0

:label
  echo branche de gestion d'échec...
exit /b 1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X