Comment ignorer une erreur dans Powershell et la laisser continuer?

42

J'essaie de voir si un processus est en cours d'exécution sur plusieurs serveurs, puis le formater dans un tableau.

get-process -ComputerName server1,server2,server3 -name explorer | Select-Object processname,machinename

C'est la partie la plus facile - Lorsque le processus n'existe pas ou que le serveur est indisponible, powershell génère une grosse erreur laide, gâche la table et ne continue pas. Exemple

Get-Process : Couldn't connect to remote machine.At line:1 char:12 + get-process <<<<  -ComputerName server1,server2,server3 -name explorer | format-table processname,machinename
+ CategoryInfo          : NotSpecified: (:) [Get-Process], InvalidOperatio   nException    + FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.Power   Shell.Commands.GetProcessCommand

Comment puis-je contourner cela? Si je souhaite quand même recevoir une notification si le processus n'est pas disponible ou en cours d'exécution.

Jake
la source

Réponses:

46

Ajouter -ErrorAction SilentlyContinueà votre commande.

Quand ce n'est pas une erreur, mais une exception non gérée, vous devriez ajouter -EV Err -EA SilentlyContinue, pour attraper l'exception. ( EAest un alias pour ErrorAction)

Vous pouvez ensuite évaluer l’erreur dans votre script en regardant $Err[0]

Bart De Vos
la source
Je crains que cela ne fonctionne pas, sauf si je le colle au mauvais endroit. get-process -ComputerName server1, server2, server3 -name explorer -ErrorAction SilentlyContinue | Nom du processus Select-Object, nom de machine
Jake
Ajoutez-le get-processou jetez un oeil à ma réponse mise à jour ci-dessus.
Bart De Vos
13

Réponse courte: ajoutez $ErrorActionPreference = 'SilentlyContinue'au début de votre code pour ne pas avoir à ajouter -ErrorAction SilentlyContinueà chaque commande

Réponse longue: https://www.gitbook.com/book/devopscollective/the-big-book-of-powershell-error-handling/details

L'homme d'étain
la source
1
Notez la différence: 'Continuer' (réglage par défaut) continue l'exécution, mais écrit des erreurs sur la console (dont op semble vouloir se débarrasser, si je le lis correctement). 'SilentlyContinue' supprime tous les messages d'erreur.
Frederik Struck-Schøning
"Ajouter $ ErrorActionPreference = 'SilentlyContinue' au début de votre code" ---> Cela a vraiment aidé, merci beaucoup pour votre aide et sa mise à disposition sur Internet.
Nishant le