Vous êtes loin d'être sur la bonne voie ici.
Vous avez déjà un gros message d'erreur. Pourquoi diable voudriez-vous écrire du code qui vérifie $?
explicitement après chaque commande ? C'est extrêmement lourd et sujet aux erreurs. La bonne solution est d' arrêter de vérifier$?
.
Au lieu de cela, utilisez le mécanisme intégré de PowerShell pour exploser à votre place. Vous l'activez en définissant la préférence d'erreur sur le niveau le plus élevé:
$ErrorActionPreference = 'Stop'
Je mets cela en haut de chaque script que j'écris, et maintenant je n'ai plus à vérifier $?
. Cela rend mon code beaucoup plus simple et plus fiable.
Si vous rencontrez des situations dans lesquelles vous avez vraiment besoin de désactiver ce comportement, vous pouvez soit catch
l'erreur, soit transmettre un paramètre à une fonction particulière à l'aide du Common -ErrorAction
. Dans votre cas, vous souhaitez probablement que votre processus s'arrête à la première erreur, détecte l'erreur, puis enregistre-la.
Notez que cela ne gère pas le cas où les exécutables externes échouent (code de sortie différent de zéro, par convention), vous devez donc toujours vérifier $LASTEXITCODE
si vous en appelez. Malgré cette limitation, le paramètre économise encore beaucoup de code et d'efforts.
Fiabilité supplémentaire
Vous pouvez également envisager d'utiliser le mode strict :
Set-StrictMode -Version Latest
Cela empêche PowerShell de continuer silencieusement lorsque vous utilisez une variable inexistante et dans d'autres situations étranges. (Voir le -Version
paramètre pour plus de détails sur ce qu'il restreint.)
La combinaison de ces deux paramètres rend PowerShell beaucoup plus de langage à échec rapide, ce qui facilite grandement la programmation.