在powershell脚本终止上运行代码以关闭文件?

时间:2013-02-18 15:29:02

标签: powershell terminate

我有一个咀嚼很多物品的剧本,有时候我想在跑步过程中杀掉它,因为我看到了南方的东西。不幸的是,我正在使用System.IO.StreamWriter写入日志文件,每当我发送Ctrl-C时,我的日志文件都会被打开。

有没有什么方法可以定义某种处理程序或退出函数,让我能够优雅地关闭我打开的文件句柄和连接?

3 个答案:

答案 0 :(得分:4)

可以尝试使用Try / Catch / Finally,将close()命令放在Finally块中。

答案 1 :(得分:2)

使用PowerShell 2.0及更高版本,您可以定义Trap,当发生终止错误时将触发该{{3}}。您可以定义多个陷阱以捕获不同的异常。这可能会导致代码比在任何地方散布的try/catch更清晰,或者将整个脚本包装在一个大的try/catch中。

答案 2 :(得分:1)

要终止脚本,请使用exit。如果抛出异常,请在try/catch/finally中使用finally和close()命令。如果它只是一个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
}

如果streamwriters的数量不时变化,您可以将它们收集到一个数组并关闭它们。例如:

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
}