Как использовать команду выхода PowerShell и друзей

Когда-нибудь задумывались: «Каким образом лучше завершить скрипт или выйти из команды в PowerShell?» Закроется ли сеанс PowerShell с помощью команды exit в PowerShell? Как возвращать пользовательские коды выхода? Ну, вам повезло!

В этом руководстве вы найдете ответы на эти вопросы и многое другое. Узнайте о всех способах выхода из сценария или сеанса PowerShell.

Приступим к завершению сеансов и скриптов PowerShell!

Предварительные требования

Для того чтобы следовать инструкциям, убедитесь, что на вашей системе установлены Windows PowerShell или PowerShell Core. В примерах в этой статье будет использоваться PowerShell 7.1.4.

Завершение консоли и скриптов с помощью команды exit в PowerShell

Давайте приступим к этому учебнику и сначала рассмотрим ключевое слово exit, одно из многих зарезервированных слов в PowerShell. Зарезервированное слово – это набор символов, встроенных в PowerShell, которые выполняют какое-то действие. Для ключевого слова exit действием является завершение сеанса PowerShell.

Давайте попрактикуемся! Откройте сеанс консоли PowerShell, введите exit и нажмите клавишу Enter. Консоль PowerShell немедленно закроется.

Этот ключевой момент также может завершить выполнение сценария, а не только сеанса консоли. Включение ключевого слова exit в сценарий и вызов exit завершает только сценарий, но не весь сеанс консоли, откуда запускается сценарий.

Скопируйте и вставьте следующий код в блокнот и сохраните сценарий как test.ps1 в каталог C:\Temp. Запустите файл сценария PowerShell, выполнив команду .\text.ps1, как показано на скриншоте ниже. Обратите внимание, что вместо того чтобы закрыть сеанс PowerShell, PowerShell завершает сценарий и возвращает управление приглашению текущего сеанса PowerShell.

# test.ps1
Write-Host "Quick! Read this before the PowerShell session closes!!"
Start-Sleep -Seconds 2
Exit
The exit keyword stopped the script execution, but the console is still running

Получение и предоставление обратной связи с использованием кодов завершения

Команда exit полезна в ситуациях, когда вам нужно, чтобы сценарий или функция выполняли какой-то код и выходили. Однако вы не получаете никаких указаний, успешно ли выполнен сценарий или нет.

Когда PowerShell выполняет последнюю команду в сценарии, она сохраняет код завершения этой последней команды в переменной $LASTEXITCODE.

Есть два стандартных кода завершения:

PowerShell не ограничивает вас кодами выхода 0 и 1. PowerShell позволяет возвращать пользовательские коды выхода, пока они являются целыми числами.

Диапазон значений для кода выхода зависит от платформы. На Windows допускаются любые 32-битные знаковые целые числа. На Unix допускаются только положительные 8-битные целые числа.

Чтобы выйти из PowerShell с пользовательским кодом выхода, вы можете указать код выхода в качестве аргумента для ключевого слова выхода.

Скопируйте и вставьте код ниже в существующий файл test.ps1 и запустите скрипт с помощью команды .\Test.ps1. Проверьте содержимое переменной $LASTEXITCODE. Указав PowerShell завершиться с кодом выхода 55, он сделал это, как вы можете видеть ниже.

Function foo {
    Write-Output "This foo function will be shown"
    Exit 55 # < -- Использование пользовательского кода выхода
}

foo
Returning a custom exit code

Прерывание циклов с помощью break

Бывают моменты, когда поведение exit неприемлемо: например, при выходе из функции. Давайте посмотрим, как помогает ключевое слово break.

Ключевое слово break заставляет PowerShell остановить цикл. После break код продолжает выполнение на следующей итерации.

Перерывы полезны в циклах PowerShell, таких как foreach, while, do-while, и switch statements, потому что они позволяют контролировать точку остановки кода до его завершения.

Давайте попрактикуемся в выходе из циклов. Ниже вы можете увидеть фрагмент кода с циклом for. Этот цикл for выполнялся бы десять раз, если бы не break. Ключевое слово break срабатывает, когда итератор равен восьми. Как только PowerShell обнаруживает ключевое слово break, он прекращает выполнение цикла.

for($i=1; $i -le 10; $i++) {
	if($i -eq 8) { break }
	$i
}

Вы можете видеть, что PowerShell прерывает цикл, когда i равно 8. Код никогда не доходит до 9. Вы успешно вышли из цикла for.

Breaking a for loop

Перенаправление выполнения кода с помощью возврата

Ключевое слово return немного отличается от предыдущих ключевых слов, поскольку оно не выходит из команд или не прерывает их выполнение. Это ключевое слово перенаправляет выполнение кода, возвращая его к месту вызова, при этом позволяя возвращать значения. И не только целые числа, как exit. Вы можете возвращать любой тип данных! Эти характеристики делают ключевое слово return более универсальным, чем предыдущие ключевые слова.

Давайте посмотрим, как это работает на примере: создание функции для объединения слов. Скопируйте приведенный ниже код в вашу сессию PowerShell:

function WordPairing ($a,$b) {

	return "$a" + "$b" # <-- Соединение двух слов в одно

}

$output = WordPairing taco cat

Write-Output "$output is a strange pairing of words."

Обратите внимание, какое значение вы возвращаете из функции в выводе.

Redirecting code execution with the return keyword

Вы перенаправляете $output, сгенерированный функцией WordPairing, обратно туда, откуда вызывается $output.

Заключение

В этом руководстве вы узнали разные способы завершения сеансов и скриптов PowerShell. Каждый метод основан на конкретном ключевом слове. У каждого ключевого слова есть свое назначение. При правильном использовании каждое из этих ключевых слов дает вам огромный контроль над тем, что делает ваш скрипт.

Теперь, когда вы знаете разные способы завершения сеансов PowerShell, как вы планируете улучшить свои скрипты с этим новым знанием?

Source:
https://adamtheautomator.com/powershell-exit/