2010-10-20 15 views
14

Salut, je suis un nouveau venu chez Powershell, mais j'ai une question à vous poser. Je veux être en mesure de dire si une commande s'est terminée avec succès afin que je puisse donner des messages significatifs à l'hôte.Déterminer si une commande Powershell a été réussie

J'utilise la commande appcmd pour ajouter une liaison dans IIS. Pour l'essentiel qui va comme suit:

./appcmd set site /site.name:........................

Mais comment puis-je faire une vérification pour assurer qu'il a réussi ou non?

Je pense que si je mets juste Write-Host "Successfully added binding" après cette déclaration, il se déclenchera après que le appcmd ait été réussi.

Je devine que je dois faire quelque chose comme:

$successful = ./appcmd set site /site.name:........................

mais $successful semble être une chaîne contenant le résultat msg?

Reconnaissant toute aide à ce sujet! Bravo

Répondre

17

En supposant que appcmd est un exe de la console, même en cas d'erreur, la ligne suivante du script sera exécutée.

Si vous voulez tester si l'EXE est erroné et que l'EXE utilise le code de sortie 0 standard pour indiquer le succès, il suffit d'inspecter la variable spéciale $? juste après avoir appelé le fichier EXE. Si c'est $ true, l'EXE a renvoyé un code de sortie 0. Si le EXE est non standard en termes de code de sortie, il retourne pour le succès (peut-être qu'il a plusieurs codes de succès) puis inspectez $LastExitCode pour obtenir le code de sortie exact le dernier EXE retourné.

+0

merci pour la réponse. Donc, je suppose que «$?» Et «$ LastExitCode» sont relatifs? Supposons que j'exécute ce (ou un autre) cmd dans le script - ces vars sont relatifs à la dernière commande qui a été exécutée? – baron

+1

Exactement. '$?' s'applique à toutes les exécutions de commandes. Il indique le succès de la commande la plus précédente. Notez que les erreurs qui ne se terminent pas (Get-ChildItem idontexist) entraînent toujours un '$?' Retournant true. Si une commande renvoie une erreur de fin, alors $ $ renvoie $ false. Si nécessaire, vous pouvez forcer une commande à convertir une erreur sans fin en une erreur de fin en utilisant le paramètre omniprésent '-ErrorAction Stop'. '$ LastExitCode' contient le code de sortie du dernier EXE exécuté. –