PowerShell でスクリプトを終了する 質問する

PowerShell でスクリプトを終了する 質問する

関数内で回復不可能なエラーが発生したときに 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
    }
    

おすすめ記事