web-dev-qa-db-fra.com

Différence entre $? et $ LastExitCode dans PowerShell

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

J'ai lu sur les 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 $? il n'explique pas ce que signifie réussir et échouer.


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

55
Colonel Panic

$LastExitCode est le code retour des applications natives. $? renvoie simplement True ou False selon que la dernière commande (applet de commande 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, il s'agit d'un code de sortie non nul:

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

Annulation d'une applet de commande avec Ctrl+C comptera également comme un échec; pour les applications natives, cela dépend du code de sortie défini.

61
Joey