Traitez les erreurs PowerShell comme un patron avec ces astuces

Traitez les erreurs PowerShell comme un patron avec ces astuces / La programmation

Lorsque vous commencez à utiliser des scripts dans PowerShell, il peut être tentant de regrouper une série de commandes Cmdlets Powershell améliorant vos compétences Windows Admin Cmdlets Powershell améliorant vos compétences Windows Admin Powershell est un outil de ligne de commande et un langage de script similaires. Il vous donne la possibilité d'automatiser votre ordinateur via les mêmes commandes que vous utilisez pour l'administrer. Lire la suite . Cependant, si votre script échoue, vous ne saurez pas par où commencer le dépannage. Pour éviter de perdre du temps à essayer de deviner pourquoi votre script a échoué, vous devez utiliser la gestion des erreurs..

La gestion des erreurs de PowerShell comporte quatre parties: le paramètre Error Action, les blocs Try / Catch, le paramètre Error Variable et la journalisation..

Erreur PowerShell lors de la manipulation simple

La première fois que vous souhaitez gérer des erreurs, c'est lorsque quelque chose arrête votre script dans ses traces. Si l’échec n’affecte pas vos étapes ultérieures, il vaut peut-être mieux l’ignorer et passer à autre chose..

En revanche, il n’est pas toujours évident de savoir quand une applet de commande donnée génère une erreur de fin. Certaines applets de commande renvoient une erreur mais n'arrêtent pas votre script. Vous pouvez ensuite attendre que votre script se termine avant de générer des bêtises..

C'est là que le -ErrorAction Le paramètre intervient. Vous l'utilisez pour forcer une applet de commande à gérer l'erreur comme vous le souhaitez. Si vous modifiez un script existant Augmentez votre productivité avec les scripts Windows PowerShell Augmentez votre productivité avec les scripts Windows PowerShell Et si vous pouviez transférer la productivité de Linux à Windows? La plupart des distributions Linux sont livrées avec le puissant shell Bash. PowerShell est un terminal tout aussi puissant pour Windows. En savoir plus, vous l'ajoutez à la fin de la ligne de commande..

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

Évidemment, si vous utilisez le Get-ChildItem cmdlet seule, l’erreur ne fait pas grand chose pour vous. Cependant, si vous souhaitez utiliser les données, il serait bon d'arrêter le script afin de savoir si la recherche a échoué et pourquoi. Si vous effectuez plusieurs recherches, vous pouvez également modifier le paramètre de Arrêtez à SilencieusementContinuer, le script continue donc si une recherche échoue. Si vous voulez voir quelle est l'erreur, vous pouvez utiliser Continuer 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 fois que votre script est exécuté, vous pouvez le changer en Renseigner. Lorsque votre applet de commande rencontre un problème, elle vous donne les options suivantes: Oui, oui pour tous, arrêter la commande, suspendre ou aider.

Cette option est un peu plus flexible, mais cela signifie que des erreurs obligent votre script à attendre votre entrée. Ce n'est peut-être pas ce que vous voulez lorsque vous exécutez un long processus du jour au lendemain..

Erreur lors de la manipulation du mode de programmation

le ErrorAction Le paramètre adresse vos erreurs de manière simple. Toutefois, si vous souhaitez un peu plus de contrôle sur les erreurs, PowerShell est toujours à votre disposition. En utilisant Essayer / attraper, nous pouvons maintenant créer une branche dans le script lorsque les applets de commande renvoient une erreur.

Comme le nom le suggère, Essayer / attraper est composé de deux parties. (Il y en a techniquement un troisième, mais nous y reviendrons dans une minute.) Le premier est le Essayer section. Vous allez exécuter votre code normal dans cette section. Vous allez toujours utiliser le -ErrorAction paramètre, mais il ne peut être défini que Arrêtez. Cet indicateur garantit que votre cmdlet déclenche la Capture-même s'il n'y a pas d'erreur de terminaison.

Essayez Get-Process "Cortana" -ErrorAction Stop

Essayez peut également empêcher d'autres cmdlets de s'exécuter si la recherche échoue. Dans ce cas, si vous envoyez le Get-Process résultats à Stop-Process, une recherche ayant échoué empêche l'exécution de la deuxième cmdlet.

Alors, maintenant que vous avez créé un bloc d'essai de cmdlets, que voulez-vous faire en cas d'échec? En utilisant le Capture la moitié, vous allez définir ceci.

Catch Write-Host "Process Not Found"

Comme avec le ErrorAction paramètre, lorsque vous faites quelque chose d'un peu plus complexe 3 Fonctions intelligentes de PowerShell après la mise à niveau vers Windows 10 3 Fonctions intelligentes de PowerShell après la mise à niveau vers Windows 10 Windows 10 nous apporte un nouveau PowerShell, essentiellement une invite de commande sur des stéroïdes. Cet article explique comment effectuer l'impossible avec PowerShell. Et c'est plus facile que vous ne le pensez! Lire la suite Capture sera utile pour plus que donner un échec en langage clair. (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 de jouer avec Essayer bloquer pour créer une recherche / action dont vous avez besoin. Vous pouvez utiliser le Capture bloquer pour que votre script vous envoie un e-mail en cas d'échec.

La troisième partie est pratique si vous souhaitez que quelque chose soit exécuté, que votre cmdlet réussisse ou non. Pour cela, vous pouvez utiliser le finalement bloc. Vous ajoutez ceci après Try and Catch et vous connectez quand une section de votre script se termine.

La variable d'erreur et la journalisation

Votre script contrôle maintenant la manière dont il traite les erreurs et comment il y répond. Vous pouvez l'utiliser comme une tâche planifiée ou au moins l'exécuter lorsque vous n'êtes pas à votre bureau. 5 raisons d'utiliser PowerShell au lieu d'un script en batch 5 raisons d'utiliser un script en batch PowerShell est ce que vous obtiendrez si vous J'ai croisé l'invite de commande avec Batch Scripting, ajouté quelques fonctionnalités supplémentaires et relevé le tout de plusieurs crans. Voici plusieurs raisons pour lesquelles vous devriez l'essayer. Lire la suite . Cependant, comment pouvez-vous enquêter sur un script ayant échoué? Avec le -ErrorVariable Vous pouvez paramétrer les erreurs de votre cmdlet pour écrire 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 appelez SearchError dans le ErrorVariable Parmeter, vous n’utilisez pas le signe dollar. Même si vous appelez une variable que vous avez créée, en raison de la manière dont fonctionne le paramètre, 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 carrément. Cela vous donne le même comportement que la variable d'erreur globale. Au lieu de cela, vous pouvez utiliser cette sortie et Essayer / attraper pour écrire une sortie personnalisée et l'horodatage.

Pour que cela fonctionne, créez un fichier texte juste après avoir défini la variable d'erreur. Faites cela avec le Nouvel article cmdlet. Vous voudrez peut-être utiliser le Renseigner option pour le ErrorAction paramètre. Cela vous permet d’ajouter à un journal existant lorsque le Nouvel article L'applet de commande échoue.

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

Maintenant, quand vous construisez votre Essayer / attraper bloquer, vous pouvez utiliser le Capture se connecter à un fichier texte. Tu utilises Avoir un rendez-vous pour créer l'horodatage. La mise en forme peut être délicate alors assurez-vous de la copier à partir de l'exemple.

Essayez Get-ChildItem -Path "~ \ Documents \ *. Jpg" -Recurse -ErrorAction Stop -ErrorVariable SearchError Catch Ajouter-Contenu -Path $ SearchLog -Value "$ (Get-Date -Format dd-MM-yy-) hh_mm_ss) Les fichiers non trouvés ont renvoyé l'erreur: $ SearchError "

Répétez cette procédure si nécessaire pour toutes vos applets de commande. 15 Tâches avancées que PowerShell peut gérer dans Windows 10 15 Tâches avancées que PowerShell peut traiter dans Windows 10 PowerShell est similaire à l'invite de commande, mais en mieux. C'est un puissant outil d'administration système. Nous avons compilé 15 tâches, simples ou complexes, qui tirent parti de la magie de PowerShell. Lire la suite et vous avez maintenant un journal des erreurs. Si vous voulez suivre les choses qui fonctionnent avec succès, vous pouvez ajouter un Ajouter du contenu à la fin de Essayer bloc. Cette journalisation ne fonctionne que lorsque votre Essayer L'applet de commande réussit. Vous pouvez ensuite enregistrer vos erreurs et vos succès avec des horodatages. La journalisation vous permet maintenant de savoir tout ce que votre script a fait, succès ou échec.

Le pouvoir du code

Utilisation de PowerShell sur la ligne de commande Invite de commandes et Windows PowerShell: quelle est la différence? Invite de commandes et Windows PowerShell: quelle est la différence? Les utilisateurs de Windows peuvent se débrouiller sans utiliser l'invite de commande ou PowerShell. Mais avec Windows 10 et les nouvelles fonctionnalités à venir, il est peut-être temps d'apprendre. Lire plus est un moyen puissant de gérer votre système. Vous pouvez relier ces mêmes commandes de manière à permettre une automatisation puissante. Une gestion correcte des erreurs est nécessaire pour vous assurer que vos scripts ne font que ce que vous souhaitez. Tout enregistrer peut vous faire gagner du temps lors du dépannage.

Y a-t-il un moment où la gestion des erreurs a enregistré votre bacon? Avez-vous un script PowerShell qui pourrait utiliser une meilleure gestion des erreurs? Quel est votre prochain projet PowerShell? Faites le nous savoir dans les commentaires.

En savoir plus sur: PowerShell.