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%
变量。
PowerShell 技能连载 - 理解 exit 语句
http://blog.vichamp.com/2014/06/27/understanding-the-statement-quot-exit-quot/