67 votes

Comment ignorer une erreur dans Powershell et la laisser continuer ?

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

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

C'est la partie facile - Quand le processus n'existe pas ou si le serveur n'est pas disponible, powershell sort une grosse erreur laide, embrouille 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 ce problème ? Si le je voudrais toujours être notifié si le processus n'est pas disponible ou en cours.

77voto

Bart De Vos Points 17611

Ajouter -ErrorAction SilentlyContinue à votre commandement.

Lorsqu'il ne s'agit pas d'une erreur, mais d'une exception non gérée, vous devez ajouter l'élément suivant -EV Err -EA SilentlyContinue afin d'attraper l'exception. ( EA est un alias pour ErrorAction )

Vous pouvez alors évaluer l'erreur dans votre script, en jetant un œil à $Err[0]

26voto

Tinman Points 309

Réponse courte : Ajouter $ErrorActionPreference = 'SilentlyContinue' au début de votre code afin que vous n'ayez pas besoin d'ajouter -ErrorAction SilentlyContinue à chaque commande

Longue réponse : Contrôle du comportement de signalement des erreurs et interception des erreurs

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X