gpt4 book ai didi

powershell - 在 bat 错误时自动停止 powershell 脚本

转载 作者:行者123 更新时间:2023-12-04 01:21:18 26 4
gpt4 key购买 nike

通常,可以使用 $ErrorActionPreference 来停止执行错误的 PS 脚本,如下例中使用了无效的 subversion 命令。脚本在第一个命令后退出。

$ErrorActionPreference='Stop'
svn foo
svn foo

尝试使用 maven 命令 (mvn.bat) 执行相同的操作会执行这两个命令。

$ErrorActionPreference='Stop'
mvn foo
mvn foo

起初我怀疑是mvn.bat没有设置错误码,PS就是看不到错误。然而,$?如下所示正确设置,当 PS 在第一个错误后退出时:

mvn foo
if (-not $?) {exit 1}
mvn foo

所以这是我的问题:鉴于 svn.exe 和 mvn.bat 都设置了失败时的错误代码,为什么 PS 脚本在 mvn 错误后没有停止。我发现全局设置“$ErrorActionPreference=Stop”比在每个命令后执行“if (-not $?) {exit 1}”以在出错时终止要方便得多。

最佳答案

并非所有命令行程序都以相同的方式提供错误。有些设置退出代码。有些人没有。有些使用错误流,有些则不使用。我见过一些命令行程序实际上输出所有错误,并且总是输出非零返回码。

因此,对于它是否成功运行,人们无法做出真正安全的猜测,因此几乎不可能将该行为编入 PowerShell。

$errorActionPreference 实际上会在 .exe 写入错误流时停止脚本,但许多 .exe 会将常规输出写入控制台并且从不填充错误流。

但它不会可靠地工作。就此而言,$? 也不会。如果 exe 返回 0 并且不写入错误 $?将是真实的。

虽然在 PowerShell 中处理这些单独的 .exe 及其错误中的每一个可能会让人头疼,但这是一个很好的例子,说明了为什么 PowerShell 的高度结构化的输出/错误/详细/警告/调试/进度流和一致的Cmdlet 中的错误行为胜过普通的旧 .EXE 工具。

希望对您有所帮助

关于powershell - 在 bat 错误时自动停止 powershell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6432732/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com