関数内で回復不可能なエラーが発生したときに PowerShell (PS1) スクリプトを終了する方法を探していました。例:
function foo() {
# Do stuff that causes an error
$host.Exit()
}
もちろん、 というものは存在しません$host.Exit()
。 は存在します$host.SetShouldExit()
が、これは実際にはコンソール ウィンドウを閉じてしまうため、これは私が望んでいることではありません。必要なのは、Python と同等で、sys.exit()
それ以上何もせずに現在のスクリプトの実行を停止するだけのものです。
編集:ええ、それはただの ですexit
。
ベストアンサー1
これは古い投稿であることは承知していますが、このトピックを検索すると上位の検索結果の 1 つになるため、このスレッドに頻繁に戻ってきます。ただし、矛盾する情報があるため、来たときよりも混乱したまま去ってしまいます。最終的には、常に自分でテストを実行して理解する必要があります。そのため、今回は調査結果を投稿します。
TL;DR実行中のスクリプトを終了するには、ほとんどの人が を使用しますExit
。ただし、スクリプトが単にシェルで後で使用する関数を宣言しているだけの場合は、Return
その関数の定義で を使用する必要があります。
終了 vs 復帰 vs 中断
Exit:現在実行中のコンテキストを「終了」します。このコマンドをスクリプトから呼び出すと、スクリプトが終了します。このコマンドをシェルから呼び出すと、シェルが終了します。
関数が Exit コマンドを呼び出すと、実行中のコンテキストが終了します。したがって、その関数が実行中のスクリプト内からのみ呼び出された場合は、そのスクリプトが終了します。ただし、スクリプトが関数を現在のシェルから使用できるように宣言し、その関数をシェルから実行した場合は、シェルがコマンドを含む関数が実行されているコンテキストであるため、シェルが終了します
Exit
。注:デフォルトでは、スクリプトを右クリックして PowerShell で実行すると、スクリプトの実行が完了すると PowerShell は自動的に閉じます。これは、
Exit
スクリプト内のコマンドやその他のものとは関係ありません。これは、この特定のスクリプト実行方法を使用して実行されるスクリプトの PowerShell のデフォルトの動作です。バッチ ファイルとコマンド ライン ウィンドウについても同様です。戻り:前の呼び出しポイントに戻ります。このコマンドをスクリプト (関数の外部) から呼び出すと、シェルに戻ります。このコマンドをシェルから呼び出すと、シェル (シェルから実行された単一のコマンドの前の呼び出しポイント) に戻ります。このコマンドを関数から呼び出すと、関数が呼び出された場所に戻ります。
戻された呼び出しポイント以降のコマンドの実行は、そのポイントから続行されます。スクリプトがシェルから呼び出され、
Return
関数の外部にコマンドが含まれている場合、シェルに戻ったときに実行するコマンドはもうないため、Return
この方法で使用される は基本的に と同じになりますExit
。Break:ループとスイッチ ケースから抜けます。ループまたはスイッチ ケースの外にいるときにこのコマンドを呼び出すと、スクリプトから抜けます。ループ内に
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 }