4

多くのオブジェクトをかみ砕くスクリプトがありますが、何かが南下しているのを見て、実行の途中でスクリプトを強制終了したい場合があります。残念ながら、System.IO.StreamWriter を使用してログ ファイルに書き込んでいますが、Ctrl-C を送信すると、ログ ファイルが開かれたままになります。

開いているファイルハンドルと接続を適切に閉じることができる、ある種のハンドラーまたは終了関数を定義する方法はありますか?

4

3 に答える 3

4

Try/Catch/Finally を使用して、close() コマンドを Final ブロッ​​クに入れてみてください。

于 2013-02-18T15:37:05.187 に答える
2

PowerShell 2.0 以降ではTrap、終了エラーが発生したときに起動する を定義できます。複数のトラップを定義して、さまざまな例外をキャプチャできます。これにより、try/catchあちこちに散らばったり、スクリプト全体を 1 つの大きなtry/catch.

于 2013-02-18T17:01:26.770 に答える
1

スクリプトを終了するには、 を使用しますexit。例外がスローされた場合はtry/catch/finally、 で close() コマンドを使用しますfinally。if-test だけの場合は、次のようにしてみてください。

function Close-Script {
    #If stream1 is created
    if($stream1) { 
        $stream1.Close()
    }

    #Terminate script
    exit
}

$stream1 = New-Object System.IO.StreamWriter filename.txt


If(a test that detects your error) {
    Close-Script
}

ストリームライターの数が時々変わる場合は、それらを配列に集めて閉じることができます。元:

function Close-Script {
    #Close streams
    $writers | % { $_.Close() }

    #Terminate script
    exit
}

$writers = @()
$stream1 = New-Object System.IO.StreamWriter filename.txt
$writers += $stream1
$stream2 = New-Object System.IO.StreamWriter filename2.txt
$writers += $stream2

If(a test that detects your error) {
    Close-Script
}
于 2013-02-18T15:39:58.673 に答える