87 votes

Différence entre $ ? et $LastExitCode dans PowerShell

Dans PowerShell, quelle est la différence entre $? y $LastExitCode ?

Je lis à propos des variables automatiques et il a dit :

$? Contains the execution status of the last operation. It contains TRUE if the last operation succeeded and FALSE if it failed.

$LastExitCode Contains the exit code of the last Windows-based program that was run.

Dans la définition de $? ça n'explique pas ce que signifie réussir et échouer.


Je demande parce que je présume que $? est Vrai si et seulement si $LastExitCode est 0, mais j'ai trouvé un contre-exemple surprenant : $LastExitCode=0 mais $?=False dans PowerShell. Rediriger stderr vers stdout donne NativeCommandError .

102voto

Joey Points 148544

$LastExitCode est le code de retour des applications natives. $? juste des retours True o False selon que la dernière commande (cmdlet ou native) s'est terminée sans erreur ou non.

Pour les cmdlets, l'échec signifie généralement une exception, pour les applications natives, c'est un code de sortie non nul :

PS> cmd /c "exit 5"
PS> $?
False
PS> cmd /c "exit 0"
PS> $?
True

Annulation d'une cmdlet avec Ctrl + C sera également considéré comme un échec ; pour les applications natives, cela dépend du code de sortie qu'elles définissent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X