如何停止第一个错误的PowerShell脚本?
我希望我的PowerShell脚本停止,当我运行的任何命令失败(如在bash set -e
)。 我使用两个Powershell命令( New-Object System.Net.WebClient
)和程序( .\setup.exe
)。
$ErrorActionPreference = "Stop"
会让你在那里的一部分(即这对cmdlet很好)。
但是对于EXE,在每次exe调用之后,您将需要自己检查$LastExitCode
,并确定是否失败。 不幸的是,我不认为PowerShell可以在这里提供帮助,因为在Windows上,EXE在“成功”或“失败”退出代码的构成方面并不十分一致。 大多数遵循0表示成功的UNIX标准,但不是全部都是。 查看这篇博文中的CheckLastExitCode函数 。 你可能会觉得它很有用。
您应该可以通过在脚本开始处使用语句$ErrorActionPreference = "Stop"
来完成此操作。
$ErrorActionPreference
的默认设置是Continue
,这就是为什么你看到你的脚本继续发生错误。
不幸的是, 由于像New-RegKey和Clear-Disk这样的错误的cmdlet ,这些答案都不够。 目前我已经在任何PowerShell脚本的顶部定位以保持我的理智。
Set-StrictMode -Version Latest $ErrorActionPreference = "Stop" $PSDefaultParameterValues['*:ErrorAction']='Stop'
然后任何本地电话获得这种待遇:
native_call.exe $native_call_success = $? if (-not $native_call_success) { throw 'error making native call' }
原生的调用模式对我来说已经慢慢变得普遍了,所以我应该考虑使它更加简洁的选项。 我仍然是一个powershell新手,所以build议是值得欢迎的。
我来到这里寻找同样的事情。 $ ErrorActionPreference =“Stop”立即杀死我的shell时,我宁愿看到错误信息(暂停),然后才终止。 回到我的批次敏感度:
IF %ERRORLEVEL% NEQ 0 pause & GOTO EOF
我发现这对我的特定ps1脚本非常相似:
Import-PSSession $Session If ($? -ne "True") {Pause; Exit}