Je sais qu'il s'agit d'un vieux message, mais je reviens souvent à ce fil de discussion, car il est l'un des premiers résultats de la recherche sur ce sujet. Cependant, je repars toujours plus confus que lorsque je suis venu à cause des informations contradictoires. En fin de compte, je dois toujours effectuer mes propres tests pour trouver la solution. Cette fois, je vais donc publier mes résultats.
TL;DR La plupart des gens voudront utiliser Exit
pour mettre fin à un script en cours d'exécution. Cependant, si votre script ne fait que déclarer des fonctions destinées à être utilisées ultérieurement dans un shell, alors vous voudrez utiliser la fonction Return
dans les définitions desdites fonctions.
Sortie vs Retour vs Pause
-
Sortie : Cela permet de "quitter" le contexte en cours d'exécution. Si vous appelez cette commande depuis un script, elle quittera le script. Si vous appelez cette commande depuis le shell, elle quittera le shell.
Si une fonction appelle la commande Exit, elle quittera le contexte dans lequel elle est exécutée. Ainsi, si cette fonction n'est appelée que depuis un script en cours d'exécution, elle quittera ce script. Cependant, si votre script déclare simplement la fonction pour qu'elle puisse être utilisée à partir du shell actuel et que vous exécutez cette fonction à partir du shell, elle sortira du shell car le shell est le contexte dans lequel la fonction contianisant le Exit
est en cours d'exécution.
Note : Par défaut, si vous faites un clic droit sur un script pour l'exécuter dans PowerShell, une fois que le script a fini de s'exécuter, PowerShell se ferme automatiquement. Cela n'a rien à voir avec le Exit
ou quoi que ce soit d'autre dans votre script. C'est juste un comportement par défaut de PowerShell pour les scripts exécutés en utilisant cette méthode spécifique d'exécution d'un script. Il en va de même pour les fichiers batch et la fenêtre de la ligne de commande.
-
Retour : Cela permet de revenir au point d'appel précédent. Si vous appelez cette commande depuis un script (en dehors de toute fonction), elle retournera au shell. Si vous appelez cette commande depuis l'interpréteur de commandes, elle reviendra à l'interpréteur de commandes (qui est le point d'appel précédent pour une commande unique exécutée depuis l'interpréteur de commandes). Si vous appelez cette commande à partir d'une fonction, elle retournera à l'endroit d'où la fonction a été appelée.
L'exécution de toute commande après le point d'appel auquel il est renvoyé se poursuivra à partir de ce point. Si un script est appelé à partir de l'interpréteur de commandes et qu'il contient la balise Return
en dehors de toute fonction, lorsqu'il revient au shell, il n'y a plus de commandes à exécuter, ce qui fait d'un Return
utilisé de cette manière est essentiellement le même que Exit
.
-
Pause : Cette commande permet de sortir des boucles et des switch cases. Si vous appelez cette commande alors que vous n'êtes pas dans une boucle ou un cas de commutation, vous sortirez du script. Si vous appelez Break
à l'intérieur d'une boucle qui est imbriquée à l'intérieur d'une boucle, elle ne sortira que de la boucle dans laquelle elle a été appelée.
Il existe également une caractéristique intéressante de Break
où l'on peut préfixer une boucle avec une étiquette et ensuite sortir de cette boucle étiquetée même si l'étiquette de la boucle a été modifiée. Break
est appelée dans plusieurs groupes imbriqués dans cette boucle étiquetée.
While ($true) {
# Code here will run
:myLabel While ($true) {
# Code here will run
While ($true) {
# Code here will run
While ($true) {
# Code here will run
Break myLabel
# Code here will not run
}
# Code here will not run
}
# Code here will not run
}
# Code here will run
}
Plus vous en savez
Fait intéressant, alors que les deux Return
et Break
sont des mots-clés intégrés qui font partie de la syntaxe PowerShell, Exit
ne l'est pas. Exit
n'est ni un cmdlet ni un alias. C'est une fonctionnalité que l'exécutable powershell.exe reconnaît. Tout comme l'exécutable cmd.exe reconnaît exit
comme une commande, mais il n'y a pas de exit.exe sur votre système.
10 votes
Si vous voulez éviter de fermer la fenêtre PowerShell ou ISE dans mon cas, utilisez "return" à la place. Il met simplement fin au contexte d'exécution actuel. "New guy" explique en détail toutes les options à des fins éducatives ; vous pourriez envisager de modifier votre réponse acceptée (a actuellement plus de votes positifs de toute façon) pour les futurs utilisateurs de StackOverflow. Cela vous permettra de déboguer le script également.
1 votes
Cela répond-il à votre question ? Que signifie exactement "exit" dans PowerShell ?