web-dev-qa-db-fra.com

Comment ignorer une erreur dans Powershell et la laisser continuer?

J'essaie de voir si un processus s'exécute 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 facile - Lorsque le processus n'existe pas ou si le serveur n'est pas disponible, 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 toujours être informé si le processus n'est pas disponible ou en cours d'exécution.

47
Jake

Ajouter -ErrorAction SilentlyContinue à votre commande.

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

Vous pouvez ensuite évaluer l'erreur dans votre script, en consultant $Err[0]

52
Bart De Vos

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

Réponse longue: https://www.gitbook.com/book/devopscollective/the-big-book-of-powershell-error -manipulation/détails

15
Tinman