我编写了一个Powershell脚本,该脚本将用于自动构建过程。在自动构建过程中使用脚本
当脚本采用正确的路径时(例如,不进入表示错误状态的if块),是否需要编写退出代码0?
此外,exit(带代码)和$ host.SetShouldExit()之间的区别是什么?
我编写了一个Powershell脚本,该脚本将用于自动构建过程。在自动构建过程中使用脚本
当脚本采用正确的路径时(例如,不进入表示错误状态的if块),是否需要编写退出代码0?
此外,exit(带代码)和$ host.SetShouldExit()之间的区别是什么?
在类似的情况下,我依赖异常(throw)和其他类型的终止错误:在这种情况下,PowerShell的退出代码是1。如果脚本自行完成(即使没有终止错误),PowerShell的退出代码为0,我们不必调用exit 0
。如果我们需要0和1之类的东西,那么我们必须使用exit
或SetShouldExit
(但请参阅下面的注释)。
让我们来看看脚本。
test1.ps1
'before2'
.\test2
'after2'
'before3'
.\test3
'after3'
'before4'
.\test4
'after4'
test2.ps1
'inner before 2'
exit 2
'inner after 2'
test3.ps1
'inner before 3'
$host.SetShouldExit(3)
'inner after 3'
test4.ps1
throw 'Oops'
输出test1.ps1的:
before2
inner before 2
after2
before3
inner before 3
inner after 3
after3
before4
Oops
At ...
+ throw <<<< 'Oops'
在这个测试场景中test4.ps1这类作品和test2.ps1和test3.ps1的那种不工作(如果工作意味着失败和退出会话立即)。
输出显示exit
终止当前脚本,SetShouldExit
没有。
由于$host.SetShouldExit(3)
,powershell.exe .\test1
的退出代码为3。我试图禁用该行来检查exit 2
是否使退出代码为2.否,它不会,由于test4中的失败,退出代码为1。
我注意到了一个区别。如果我从交互式PowerShell控制台调用脚本,而不是在脚本中使$host.SetShouldExit
使调音台关闭控制台。 exit
没有。
一个想法。 $host.SetShouldExit
的行为可能取决于主机的实现。例如,在我自己的主机退出中根本不支持(不允许像这样关闭主机应用程序),我的实现SetShouldExit
基本上什么都不做。