Я понимаю, что это старая запись, но я часто возвращаюсь к этой теме, так как это один из лучших результатов поиска при поиске по этой теме. Однако я всегда оставляю более смущенным, чем когда приходил из-за противоречивой информации. В конечном счете, я всегда должен выполнять свои собственные тесты, чтобы понять это. Так что на этот раз я опубликую свои выводы.
Выход: это «выйдет» из текущего запущенного контекста. Если вы вызываете эту команду из скрипта, он выйдет из скрипта. Если вы вызовете эту команду из оболочки, она выйдет из оболочки.
Если функция вызывает команду Exit, она выходит из любого контекста, в котором она выполняется. Поэтому, если эта функция вызывается только из запущенного сценария, она завершает этот сценарий. Однако, если ваш скрипт просто объявляет функцию, чтобы ее можно было использовать из текущей оболочки, и вы запускаете эту функцию из оболочки, он выйдет из оболочки, потому что оболочка - это контекст, в котором выполняется функция, составляющая Exit
команду.
Примечание. По умолчанию, если щелкнуть правой кнопкой мыши сценарий, чтобы запустить его в PowerShell, после его запуска PowerShell автоматически закроется. Это не имеет ничего общего с Exit
командой или чем-то еще в вашем скрипте. Это просто поведение PowerShell по умолчанию для сценариев, запускаемых с использованием этого конкретного метода запуска сценария. То же самое верно для командных файлов и окна командной строки.
Возврат: возврат к предыдущему пункту вызова. Если вы вызовете эту команду из скрипта (вне каких-либо функций), она вернется в оболочку. Если вы вызовете эту команду из оболочки, она вернется в оболочку (которая является предыдущей точкой вызова для одной команды, запущенной из оболочки). Если вы вызываете эту команду из функции, она вернется туда, откуда была вызвана функция.
Выполнение любых команд после точки вызова, в которую она возвращается, будет продолжено с этой точки. Если скрипт вызывается из оболочки и содержит Return
команду вне каких-либо функций, то когда он возвращается в оболочку, больше нет команд для выполнения, что делает Return
использование таким образом по существу таким же, как Exit
.
Перерыв: это вырвется из петель и переключит дела. Если вы вызываете эту команду, не находясь в цикле или переключении, она выйдет из сценария. Если вы вызываете Break
внутри цикла, который вложен в цикл, он будет прерываться только из цикла, в котором он был вызван.
Существует также интересная особенность, заключающаяся в том, что Break
вы можете добавить префикс цикла к метке, а затем выйти из этого помеченного цикла, даже если Break
команда вызывается внутри нескольких вложенных групп в этом помеченном цикле.
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
}