Как отменить действие в powershell
Завершение сценария в PowerShell
Я искал способ завершить сценарий PowerShell (PS1), когда в функции возникает неустранимая ошибка. Например:
10 ответов
Я понимаю, что это старый пост, но я возвращаюсь к этой теме, так как это один из лучших результатов поиска при поиске этой темы. Однако я всегда оставляю более запутанным, чем когда я пришел из-за противоречивой информации. В конечном счете я всегда должен выполнять свои собственные тесты, чтобы выяснить это. Поэтому на этот раз я опубликую свои выводы.
TL; DR большинство людей захотят использовать Exit для завершения запущенных сценариев. Однако, если ваш сценарий просто объявляя функции, которые позже будут использоваться в оболочке, вы захотите использовать Return в определениях указанных функций.
выход vs возвращение vs перерыв
выход: это будет «выход» из текущего контекста. Если вы вызовете эту команду из скрипта, она выйдет из скрипта. Если вы вызовете эту команду из оболочки, она выйдет из оболочки.
если функция вызывает команду Exit, она выйдет из контекста он прибывает. Поэтому, если эта функция вызывается только из запущенного скрипта, она выйдет из этого скрипта. Однако, если ваш скрипт просто объявляет функцию, чтобы ее можно было использовать из текущей оболочки, и вы запускаете эту функцию из оболочки, она выйдет из оболочки, потому что оболочка-это контекст, в котором функция contianing работает.
Примечание: по умолчанию, если вы щелкните правой кнопкой мыши на скрипте, чтобы запустить его в PowerShell, как только скрипт выполняется, PowerShell автоматически закрывается. Это не имеет ничего общего с Exit команда или что-нибудь еще в вашем скрипте. Это просто поведение PowerShell по умолчанию для сценариев, выполняемых с использованием этого конкретного метода запуска сценария. То же самое верно для пакетных файлов и окна командной строки.
вернуться: это вернется к предыдущей точке вызова. Если вы вызовете эту команду из скрипта (вне любых функций), она вернется к оболочка. Если вы вызовете эту команду из оболочки, она вернется в оболочку (которая является предыдущей точкой вызова для одной команды, запущенной из оболочки). Если вы вызовете эту команду из функции, она вернется туда, откуда была вызвана функция.
перерыв: это вырвется из петель и переключателей. Если вы вызовете эту команду, не находясь в цикле или переключателе, она выйдет из скрипта. Если вы позвоните Break внутри цикла, вложенная в цикл, то это будет только разорвать цикл назывался.
существует также интересная особенность Break где вы можете префикс цикла с меткой, а затем вы можете вырваться из этого помеченного цикла, даже если Break команда вызывается в нескольких вложенных группах внутри этого помеченного цикла.
about_Return
Краткое описание
Описывает выход из текущей области действия, которая может быть функцией, скриптом или блоком скриптов.
Подробное описание
return Ключевое слово выполняет выход из функции, скрипта или блока скрипта. Он может использоваться для выхода из области в определенной точке, для возвращения значения или для указания на достижение конца области.
Пользователи, знакомые с языками, например C или C, # могут использовать return ключевое слово, чтобы логика не выглядела явно.
Начиная с PowerShell 5,0, в PowerShell добавлен язык для определения классов с помощью формального синтаксиса. В контексте класса PowerShell ничего не выводится из метода, за исключением того, что указывается с помощью return инструкции. Дополнительные сведения о классах PowerShell можно узнать в about_Classes.
Синтаксис
Синтаксис return ключевого слова выглядит следующим образом:
return Ключевое слово может располагаться отдельно, а за ним может следовать значение или выражение следующим образом:
Примеры
В следующем примере return ключевое слово используется для выхода из функции в определенной точке, если выполняется условное выполнение. Нечетные числа не умножаются, поскольку оператор return завершается до выполнения этой инструкции.
Следующий пример включает оператор, позволяющий пользователю понять, что функция выполняет вычисление:
Если вы хотите отобразить сообщение в функции, начиная с PowerShell 5,0, можно использовать Information поток. Приведенный ниже код исправляет приведенный выше пример с помощью Write-Information командлета с InformationAction продолжением.
Возвращаемые значения и конвейер
При возврате коллекции из блока скрипта или функции PowerShell автоматически выполняет откат элементов и передает их по одному за раз через конвейер. Это происходит из-за обработки PowerShell по одному времени. Дополнительные сведения см. в разделе about_pipelines.
Эта концепция показана в следующем примере функции, возвращающей массив чисел. Выходные данные функции передаются в командлет, Measure-Object который подсчитывает количество объектов в конвейере.
Чтобы принудительно вернуть коллекцию в качестве одного объекта в конвейер, используйте один из следующих двух методов:
Выражение унарного массива
Используя унарное выражение, можно отправить возвращаемое значение вниз по конвейеру в виде одного объекта, как показано в следующем примере.
Завершение скрипта в PowerShell
Я искал способ завершить сценарий PowerShell (PS1), когда в функции возникает неисправимая ошибка. Например:
Я понимаю, что это старая запись, но я часто возвращаюсь к этой теме, так как это один из лучших результатов поиска при поиске по этой теме. Однако я всегда оставляю более смущенным, чем когда приходил из-за противоречивой информации. В конечном счете, я всегда должен выполнять свои собственные тесты, чтобы понять это. Так что на этот раз я опубликую свои выводы.
TL; DR Большинство людей захотят использовать Exit для завершения запущенных скриптов. Однако, если ваш скрипт просто объявляет функции, которые впоследствии будут использоваться в оболочке, вы захотите использовать их Return в определениях указанных функций.
Выход против возврата против перерыва
Выход: это «выйдет» из текущего запущенного контекста. Если вы вызываете эту команду из скрипта, он выйдет из скрипта. Если вы вызовете эту команду из оболочки, она выйдет из оболочки.
Примечание. По умолчанию, если щелкнуть правой кнопкой мыши сценарий, чтобы запустить его в PowerShell, после его запуска PowerShell автоматически закроется. Это не имеет ничего общего с Exit командой или чем-то еще в вашем скрипте. Это просто поведение PowerShell по умолчанию для сценариев, запускаемых с использованием этого конкретного метода запуска сценария. То же самое верно для командных файлов и окна командной строки.
Возврат: возврат к предыдущему пункту вызова. Если вы вызовете эту команду из скрипта (вне каких-либо функций), она вернется в оболочку. Если вы вызовете эту команду из оболочки, она вернется в оболочку (которая является предыдущей точкой вызова для одной команды, запущенной из оболочки). Если вы вызываете эту команду из функции, она вернется туда, откуда была вызвана функция.
Перерыв: это вырвется из петель и переключит дела. Если вы вызываете эту команду, не находясь в цикле или переключении, она выйдет из сценария. Если вы вызываете Break внутри цикла, который вложен в цикл, он будет прерываться только из цикла, в котором он был вызван.
Существует также интересная особенность, заключающаяся в том, что Break вы можете добавить префикс цикла к метке, а затем выйти из этого помеченного цикла, даже если Break команда вызывается внутри нескольких вложенных групп в этом помеченном цикле.
Сочетания клавиш для интегрированной среды сценариев Windows PowerShell
Используйте следующие сочетания клавиш для выполнения действий в интегрированной среде скриптов Windows PowerShell®. Интегрированная среда сценариев Windows PowerShell доступна в серверных и клиентских операционных системах Windows, но ее можно установить и в некоторых старых операционных системах Windows в составе скачиваемого пакета Windows Management Framework 4.0.
Сочетания клавиш для редактирования текста
При редактировании текста можно использовать приведенные ниже сочетания клавиш.
Сочетания клавиш для выполнения сценариев
При запуске сценариев в области сценариев можно использовать приведенные ниже сочетания клавиш.
Сочетания клавиш для настройки представления
Для настройки представления в интегрированной среде сценариев Windows PowerShell можно использовать приведенные ниже сочетания клавиш. Они доступны во всех областях приложения.
Сочетания клавиш для отладки сценариев
При отладке сценариев можно использовать приведенные ниже сочетания клавиш.
| Действие | Сочетание клавиш | Область использования |
|---|---|---|
| Запустить или продолжить | F5 | Область сценариев при отладке сценария |
| Шаг с заходом | F11 | Область сценариев при отладке сценария |
| Шаг с обходом | F10 | Область сценариев при отладке сценария |
| Шаг с выходом | SHIFT + F11 | Область сценариев при отладке сценария |
| Отображение стека вызовов | CTRL + SHIFT + D | Область сценариев при отладке сценария |
| Список точек останова | CTRL + SHIFT + L | Область сценариев при отладке сценария |
| Переключить точку останова | F9 | Область сценариев при отладке сценария |
| Удалить все точки останова | CTRL + SHIFT + F9 | Область сценариев при отладке сценария |
| Остановить отладчик | SHIFT + F5 | Область сценариев при отладке сценария |
Сочетания клавиш для вкладок сценариев Windows PowerShell
При работе с вкладками Windows PowerShell можно использовать приведенные ниже сочетания клавиш.
about_Break
Краткое описание
Подробное описание
break Оператор предоставляет способ выхода из текущего управляющего блока. Выполнение продолжится в следующей инструкции после блока управления. Инструкция поддерживает метки. Метка — это имя, назначаемое оператору в скрипте.
Использование break in Loops
В следующем примере показано, как использовать break оператор для выхода из for оператора:
Чаще используется break оператор в цикле, где должно выполняться внутреннее условие. Рассмотрим следующий foreach пример инструкции:
Использование метки break в цикле
break Перемещает выполнение из цикла с меткой. Во встроенных циклах результат отличается от результата break ключевого слова при его использовании. В этом примере имеется while оператор с for оператором:
Можно вложить много циклов с метками, как показано в следующем примере.
PowerShell не ограничивает, насколько далеко могут возобновить выполнение меток. Метка может даже передавать управление между скриптом и границами вызовов функций.
Использование break в switch операторе
В switch конструкции break заставляет PowerShell выйти из switch блока кода.
break Ключевое слово используется для выхода из switch конструкции. Например, следующая switch инструкция использует break инструкции для проверки наиболее конкретного условия:
Когда PowerShell достигает первого break оператора, switch инструкция завершается. Если четыре break инструкции удаляются из примера, выполняются все четыре условия. В этом примере используется break оператор для вывода результатов при выполнении наиболее конкретного условия.
Использование break в trap операторе
Обратите внимание, что выполнение останавливается при возникновении исключения. After loop Никогда не достигается. Исключение создается повторно после trap выполнения.
Не используйте break за пределами цикла, switch или trap
Это означает, что функции и скрипты, которые случайно используют break вне включающей конструкции, поддерживающей эту функцию, могут случайно завершить свои вызывающие объекты.