Accueil

Gérez les erreurs PowerShell comme un boss avec ces conseils

Added 2020-01-02


Comme son nom l'indique, PowerShell est beaucoup plus puissant que l'invite de commande Windows standard. Avec ce pouvoir vient une plus grande possibilité de confusion des erreurs. Si votre script échoue soudainement, vous ne savez peut-être pas par où commencer pour chercher ce qui ne va pas. C'est là que la gestion des erreurs de PowerShell est utile.

Si vous connaissez d'autres langues, vous connaissez probablement les bases de la gestion des erreurs, mais vous devez connaître certains aspects spécifiques à PowerShell. La gestion des erreurs se compose de quatre parties dans PowerShell: le paramètre Action d'erreur, les blocs Try / Catch, le paramètre Variable d'erreur et la journalisation.

Gestion des erreurs PowerShell en toute simplicité

La première étape de la gestion des erreurs PowerShell consiste à gérer quelque chose qui arrête votre script sur ses traces. Si l'échec n'affecte pas le reste de votre script, il peut être préférable de simplement dire à PowerShell d'ignorer les erreurs et de continuer.

D'un autre côté, il n'est pas toujours clair lorsqu'une applet de commande donnée lève une erreur de terminaison. Certaines applets de commande renvoient une erreur mais n'arrêtent pas votre script. Cela pourrait vous laisser attendre la fin de votre script pendant qu'il génère un non-sens.

C’est là que-ErrorAction entre en jeu. Vous l'utilisez pour forcer une applet de commande à gérer l'erreur comme vous le souhaitez. Si vous modifiez un script existant, vous l'ajoutez à la fin de la ligne d'applet de commande.

Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction Stop

De toute évidence, si vous utilisez leGet-ChildItem applet de commande seule, cette erreur ne fait pas grand-chose pour vous. Cependant, si vous voulez faire quoi que ce soit avec les données, il serait bon d'arrêter le script, vous savez donc que la recherche a échoué et pourquoi. Sinon, si vous effectuez plusieurs recherches, modifiez le paramètre deArrêtez àContinuez en silence, de sorte que le script continue si une recherche échoue. Si vous voulez voir quelle est l'erreur, vous pouvez utiliserContinuer comme paramètre à la place.

Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction SilentlyContinue

Si vous préférez avoir la possibilité de contrôler ce qui se passe à chaque exécution de votre script, vous pouvez le remplacer parRenseigner. Lorsque votre applet de commande rencontre un problème, elle propose des options:Oui, Oui pour tous, Commande d'arrêt, Suspendre, ou Aidez-moi.

Gestion simple des erreurs PowerShell à l'aide de ErrorAction

Gestion des erreurs dans PowerShell à l'aide de try / catch

Erreur PowerShell Gestion de la manière puissante

leErrorAction Le paramètre corrige vos erreurs de manière simple. Cependant, si vous recherchez un peu plus de contrôle sur les erreurs, PowerShell a toujours ce qu'il vous faut. En utilisantEssayez / Catch, nous pouvons maintenant brancher le script lorsque les applets de commande renvoient une erreur.

Gestion des erreurs dans PowerShell à l'aide de try / catch

Comme le nom le suggère,Essayez / Catch est composé de deux parties. (Il y a techniquement un troisième, mais nous y reviendrons dans une minute.) Le premier est leEssayer section. Vous allez exécuter votre code normal dans cette section. Vous allez toujours utiliser le-ErrorAction , mais il ne peut être défini queArrêtez. Cet indicateur garantit que votre applet de commande déclenche laCapture—Même s'il n'a pas d'erreur de terminaison.

Essayer{
  Get-Process "Cortana" -ErrorAction Stop
}

Try peut également empêcher l'exécution d'autres applets de commande si la recherche échoue. Dans ce cas, si vous envoyez leGet-Process résultats àStop-Process, une recherche échouée empêche la deuxième applet de commande de s'exécuter.

Maintenant que vous avez créé un bloc d'essai d'applets de commande, que voulez-vous faire en cas d'échec? En utilisant leCapture la moitié, vous allez définir cela.

Capture{
  Write-Host "Process Not Found"
}

Comme avec leErrorAction paramètre, lorsque vous faites quelque chose d'un peu plus complexeCapture sera utile pour plus que de donner un échec en langage simple, en particulierJournalisation des erreurs PowerShellquand vous faites quelque chose d'un peu plus complexe6 vérificateurs de hachage gratuits pour vérifier l'intégrité de tout fichier. (Dans l'exemple ci-dessus, l'échec est forcé en utilisant le nom de l'application et non le nom du processus.) Assurez-vous donc que vous jouez avec leEssayer bloquer pour créer une recherche / action dont vous avez besoin. Vous pouvez utiliser leCapture bloquer pour que votre script vous envoie un e-mail en cas d'échec.

La troisième partie est utile si vous voulez que quelque chose s'exécute, que votre applet de commande réussisse ou non. Pour cela, vous pouvez utiliser lefinalement bloquer. Vous l'ajoutez après Try and Catch et vous connectez à la fin d'une section de votre script.

La variable d'erreur et la journalisation

Votre script contrôle désormais la façon dont il gère les erreurs et comment il y répond. Vous pouvez l'utiliser comme tâche planifiée ou au moins l'exécuter lorsque vous n'êtes pas à votre bureau. Cependant, comment pouvez-vous enquêter sur un script qui a échoué? Avec le-ErrorVariable paramètre les erreurs de votre applet de commande écrivent dans une variable personnalisée.

Ceci est une alternative au système$ Erreur variable, qui contient toutes les erreurs de la session en cours.

Votre applet de commande doit être un peu plus longue. Tout d'abord, définissez une variable, quelque chose comme$ SearchError fera pour l'exemple. Quand vous appelezSearchError dans leErrorVariable parmètre, vous n'utilisez pas le signe dollar.

Même si vous appelez une variable que vous avez créée, en raison de la façon dont le paramètre fonctionne, vous l'appelez sans le signe dollar. Ajoutez ensuite cela à la fin de la ligne.

Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction Continue -ErrorVariable SearchError

Si vous ajoutez un+ devant le nom de la variable, vous pouvez ajouter à la variable plutôt que de la remplacer purement et simplement. Cela vous donne le même comportement que la variable d'erreur globale. Au lieu de cela, vous pouvez utiliser cette sortie etEssayez / Catch pour écrire une sortie personnalisée et l'horodater.

<23>Gestion des erreurs dans PowerShell à l'aide de try / catch

Pour que cela fonctionne, créez un fichier texte juste après avoir défini la variable d'erreur. Faites cela avec leNouvel article applet de commande. Vous pouvez utiliser leRenseigner option pour leErrorAction paramètre. Cela vous permet d'ajouter à un journal existant lorsque leNouvel article l'applet de commande échoue.

$ SearchLog = New-Item "~ \ SearchLog.txt" -type file -ErrorAction Inquire

Maintenant, lorsque vous construisez votreEssayez / Catch bloc, vous pouvez utiliser leCapture pour vous connecter à un fichier texte. Tu utilisesAvoir un rendez-vous pour créer l'horodatage. Le formatage peut être délicat, alors assurez-vous de le copier à partir de l'exemple.

Essayer{
  Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction Stop -ErrorVariable SearchError
}
Capture{
  Add-Content -Path $ SearchLog -Value "$ (Get-Date -Format jj-MM-aa-hh_mm_ss) Les fichiers non trouvés ont renvoyé une erreur: $ SearchError"
}

Répétez cela au besoin pour toutes vos applets de commande, et vous avez maintenant un bon journal des erreurs. Si vous voulez suivre les choses qui fonctionnent correctement, vous pouvez ajouter unAjouter du contenu à la fin deEssayer bloquer.

Cette journalisation s'exécute uniquement lorsque votreEssayer L'applet de commande réussit. Vous pouvez ensuite enregistrer vos erreurs et succès avec des horodatages. La journalisation vous permet désormais de savoir tout ce que votre script a fait, succès ou échec.

PowerShell n'est pas votre seule option

Bien que PowerShell soit un outil pratique pour de nombreuses tâches Windows, il peut être difficile à apprendre. Il ne convient pas non plus à tout. Si vous effectuez la maintenance du système sur votre ordinateur ou<24>vérification de l'intégrité d'un fichierGestion des erreurs dans PowerShell à l'aide de try / catch, PowerShell est pratique. D'un autre côté, si vous cherchez à exécuter un script pour télécharger des fichiers depuis Internet ou une tâche plus générale, vous avez d'autres options.

<25>





Nuage de tags

Choix de L'éditeur


Thomas Becket

Je suis un écrivain indépendant qui couvre la programmation et les logiciels.
Je suis étudiant en informatique et je m'intéresse à la programmation, aux logiciels et à la technologie
Gadgets technologiques et critiques 2019