我一直在寻找一种方法,在函数中发生不可恢复的错误时终止PowerShell (PS1)脚本。例如:

function foo() {
    # Do stuff that causes an error
    $host.Exit()
}

当然,没有$host.Exit()这样的东西。有$host.SetShouldExit(),但这实际上关闭了控制台窗口,这不是我想要的。我需要的是一些相当于Python的sys.exit(),它将简单地停止当前脚本的执行,而不需要进一步的告别。

编辑:是的,只是退出。咄。


当前回答

您应该使用exit关键字。

其他回答

当我想让一个函数退出脚本而不抛出错误,但如果从那里使用该函数,则不退出控制台时,我想到了一个简洁的小技巧来做到这一点。它涉及$PSScriptRoot自动变量,该变量仅在运行脚本时定义。

if($PSScriptRoot){exit}

抛出一个异常会很好,特别是当你想澄清错误原因时:

throw "Error Message"

这将生成一个终止错误。

也许用“陷阱”更好。PowerShell trap指定当发生终止或错误时要运行的代码块。类型

Get-Help about_trap

了解更多关于trap语句的信息。

我认为你在寻找回归而不是打破。Break通常用于循环,并且只从最内部的代码块中中断。使用Return命令退出函数或脚本。

我用它来重播一个节目。我不知道它是否有帮助,但它是一个简单的if语句,只需要两个不同的条目。它在powershell中为我工作。

$rerun = Read-Host "Rerun report (y/n)?"

if($rerun -eq "y") { Show-MemoryReport }
if($rerun -eq "n") { Exit }

不知道这是否有帮助,但我相信这将沿线终止程序后,你已经运行它。但是,在这种情况下,每个定义的输入都需要一个列出并分类的输出。您还可以让退出调用显示一个新的提示行,并以这种方式终止程序。