PowerShell 技能连载 - 理解 exit 语句

PowerShell 支持基于作用域的 exit 关键字。它的工作方式也许和您想象的很不一样。

我们假设有这样一个函数:

function test
{
  'A'
  exit
  'B'
}

当您将这个函数保存为一个脚本文件,然后执行这个脚本,将得到以下结果:

PS> C:\Users\Tobias\Documents\PowerShell\test12343.ps1
A

这意味着 exit 使函数提前退出。然而,当您没有保存该脚本,或当您以交互式的方式调用该函数,您的整个 PowerShell 宿主将会关闭。

exit 将会导致调用者上下文退出,而不仅仅是所在的函数。所以如果您将脚本像这样保存,您也许会有意外发现:

function test
{
  'A'
  exit
  'B'
}

'Start'
test
'Stop'

现在的结果类似这样:

PS> C:\Users\Tobias\Documents\PowerShell\test12343.ps1
Start
A

如您所见,“Stop”语句不再能执行到。exit 使得函数调用者作用域都退出了。这是为什么您以交互式执行该函数会导致您的 PowerShell 被关闭的原因(因为此时您的调用者作用域是宿主本身)。

那么 exit 应该怎么使用?当脚本执行结束的时候您可以用它来设置错误等级(error level)。该错误等级可以被调用者读取,所以如果您通过计划任务启动一个 PowerShell 脚本,或者用批处理文件通过 powershell.exe 来启动它,那么您通过 exit 指定的数值将会作为脚本的返回值,并赋值给批处理文件的 %ERRORLEVEL% 变量。

作者

吴波

发布于

2014-06-27

更新于

2022-07-06

许可协议

评论