我一直在寻找一种在函数内发生不可恢复的错误时终止PowerShell (PS1)脚本的方法。例如:
function foo() {
# Do stuff that causes an error
$host.Exit()
}
当然不存在$host.Exit()
这样的东西。有$host.SetShouldExit()
,但这实际上关闭了控制台窗口,这不是我想要的。我需要的是一个等同于Python的sys.exit()
的东西,它可以简单地停止当前脚本的执行,而不会有更多的损失。
编辑:是的,就是exit
。是啊。
发布于 2010-01-07 18:04:58
您应该使用the exit
keyword。
发布于 2014-05-16 19:19:17
我意识到这是一个老帖子,但我发现自己经常回到这个帖子,因为它是搜索这个主题时的热门搜索结果之一。然而,当我来的时候,由于信息的冲突,我总是留下更多的困惑。最终,我必须执行自己的测试才能弄清楚。所以这一次我将发布我的发现。
TL;DR大多数人都希望使用Exit
来终止正在运行的脚本。但是,如果您的脚本只是声明稍后将在shell中使用的函数,那么您将希望在所述函数的定义中使用Return
。
退出vs返回vs中断
如果一个函数调用Exit命令,它将退出它所运行的任何上下文。因此,如果该函数仅从正在运行的脚本中调用,它将退出该脚本。但是,如果您的脚本仅仅声明了函数以便可以在当前shell中使用,并且您从shell运行该函数,那么它将退出shell,因为shell是运行包含Exit
命令的函数的上下文。
注意:默认情况下,如果您右键单击脚本以在PowerShell中运行它,一旦脚本运行完毕,PowerShell将自动关闭。这与Exit
命令或脚本中的任何其他内容都没有关系。这只是使用这种运行脚本的特定方法运行的脚本的默认PowerShell行为。对于批处理文件和命令行window.
在返回的调用点之后执行的任何命令都将从该点继续执行。如果脚本是从shell调用的,并且它包含任何函数之外的Return
命令,那么当它返回到shell时,就没有更多的命令要运行了,从而使以这种方式使用的Return
本质上与Exit
.
Break
,它只会中断调用它的循环。Break
还有一个有趣的特性,您可以在循环前面加上标签,然后即使在已标记的循环中的多个嵌套组中调用了Break
命令,也可以中断已标记的循环。
While ($true) {#此处的代码将运行:myLabel While ($true) {#此处的代码将运行中断myLabel #此处的代码将不会运行}#此处的代码将不会运行}#此处的代码将不会运行}#此处的代码将运行}
发布于 2012-10-20 02:56:55
Exit
也将退出PowerShell。如果您希望“突破”当前函数或脚本--请使用Break
:)
If ($Breakout -eq $true)
{
Write-Host "Break Out!"
Break
}
ElseIf ($Breakout -eq $false)
{
Write-Host "No Breakout for you!"
}
Else
{
Write-Host "Breakout wasn't defined..."
}
https://stackoverflow.com/questions/2022326
复制