PowerShell Exitコマンドおよび関連コマンドの使用方法

考えたことがありますか、「PowerShellでスクリプトを終了する最良の方法は何ですか?」PowerShell終了コマンドでPowerShellセッションを終了しますか?カスタム終了コードを返す方法は?それでは、ラッキーです!

このガイドでは、これらの質問やその他の疑問に答えます。PowerShellスクリプトまたはセッションを終了する方法について学びます。

さあ、いくつかのPowerShellセッションとスクリプトを終了する準備をしましょう!

前提条件

このガイドに従うには、マシンにWindows PowerShellまたはPowerShell Coreがインストールされていることを確認してください。この記事の例では、PowerShell 7.1.4を使用します。

PowerShell終了コマンドを使用してコンソールとスクリプトを終了する

このチュートリアルでは、ますます多くのreserved wordsの1つであるexitキーワードについて説明しましょう。予約語とは、PowerShellに組み込まれた文字のセットで、あるアクションを実行します。 exitキーワードの場合、そのアクションはPowerShellをPowerShellセッションから終了させることです。

練習してみましょう! PowerShellコンソールセッションを開き、exitを入力してEnterキーを押します。 PowerShellコンソールがすぐに閉じられます。

このキーワードは、コンソールセッションではなく、スクリプトを終了させることもできます。スクリプトにexitキーワードを含め、exitを使用するとスクリプトのみが終了し、スクリプトが実行されたコンソールセッション全体は終了しません。

以下のコードをメモ帳にコピーして、スクリプトをtest.ps1としてC:\Tempディレクトリに保存してください。次に、以下のスクリーンショットに示すように、コマンド.\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変数に格納します。

デフォルトの終了コードは2つあります:

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

ブレークを使用してループから抜け出す

関数を終了するなど、exit動作が許容できない瞬間があります。 breakキーワードがどのように役立つかを確認しましょう。

breakキーワードは、PowerShellにループを停止させます。 breakの後、コードは次のイテレーションで実行が継続されます。

ループ内での休憩は、foreachwhiledo-while、およびswitch文などのPowerShellループで役立ちます。コードが完了する前にコードが停止する場所を制御できます。

ループから抜け出す練習をしましょう。以下に、forループを使用したコードのスニペットが示されています。forループは、内部にbreakがない場合、10回繰り返されます。イテレータが8に等しくなるとbreakキーワードがトリガーされます。PowerShellはbreakキーワードを見つけると、ループを停止します。

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

iが8に等しくなると、PowerShellがループを停止することがわかります。コードは9には到達しません。あなたはforループから正常に抜け出しました。

Breaking a for loop

Returnを使用してコードの実行をリダイレクト

returnキーワードは、以前のキーワードとは少し異なります。コマンドを終了したり中断したりするのではなく、コードの実行をリダイレクトします。このキーワードは、呼び出し元に実行を返し、同時に値を返すことができます。そして、exitと同様に、整数だけでなく、任意のタイプを返すことができます!これらの振る舞いにより、returnキーワードは以前のキーワードよりも柔軟性が高くなります。

以下は、実例を使ってその動作を見てみましょう:単語をペアにする関数を作成することを例にします。以下のコードをあなたのPowerShellセッションにコピーしてください:

function WordPairing ($a,$b) {

	return "$a" + "$b" # <-- 2つの単語を1つの単語に結合

}

$output = WordPairing taco cat

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

関数から返される値が出力に表示されることに注目してください。

Redirecting code execution with the return keyword

WordPairing関数によって生成された$outputを、$outputが呼び出される場所にリダイレクトします。

結論

このガイドでは、PowerShellセッションやスクリプトを終了するさまざまな方法を学びました。各方法は特定のキーワードに依存しています。各キーワードには特定のユースケースがあります。適切に使用すると、これらの各キーワードはスクリプトの動作を制御するための巨大なコントロールを提供します。

PowerShellセッションを終了するさまざまな方法を知った今、この新しい知識を使ってスクリプトをどのように改善する予定ですか?

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