powershell - 如果发生错误,阻止运行下一个脚本
问题描述
如果前一个脚本出错,如何防止下一个脚本运行?
脚本
RUNME.ps1: |
write-Host "Script:" $PSCommandPath;
write-Host "Path:" $PSScriptRoot;
write-Host "=====";
& "$PSScriptRoot/script1.ps1" &&
& "$PSScriptRoot/script2.ps1" &&
& "$PSScriptRoot/script3.ps1";
SCRIPT1.ps1: |
write-host "Hello from Script1" &&
write-host "Version $($psversiontable.PSVersion)";
SCRIPT2.ps1: |
write-host "Hello from Script2" &&
Get-Date -Format ss | %{if ($_ % 2 -eq 0) { write-error "$_ even" } else {write-host "$_ odd" }}
SCRIPT3.ps1: |
write-host "Hello from Script3" ||
write-host "Version $($psversiontable.PSVersion)";
更新
根据@zett42 的回答,我必须更新Script2以涵盖该场景。因此,如果 Script2 失败,我不希望 Script3 运行。
解决方案
一种可能的方法是通过报告错误的脚本设置一个不同于零的退出代码:
脚本2.ps1:
$errCount = $error.Count
write-host "Hello from Script2" &&
Get-Date -Format ss | %{if ($_ % 2 -eq 0) { write-error "$_ even" } else {write-host "$_ odd" }}
# If there are new errors, exit script with an exit code that indicates error
if( $error.Count -gt $errCount ) {
exit 1
}
这是有效的,因为&&
and||
管道链操作员使用$?
and$LASTEXITCODE
变量来确定失败。
假定$ErrorActionPreference
未设置为Stop
。如果是Stop
,则报告错误的第一个命令将导致脚本终止错误,过早退出脚本(在达到if
条件之前)并跳过所有后续脚本。
推荐阅读
- sql - 查询获取同一张表中customerID列的每个唯一值的表的最大主键ID
- javascript - 单击JavaScript中的按钮后如何触发键盘“keydown”事件?
- c# - 数据网格 C# WPF 中的选定复选框被复制到其他复选框中
- model - MVC 核心表单发布返回 Null
- angular - 如何在打字稿的http post响应中解开对象?
- ios - Xcode:CollectionViewCell 图像在点击时变得可见,它不应该
- python - 如何从 Pandas 数据框中删除记录但保留异常?
- python - 如何将日期转换为日期时间
- kubernetes - 具有 hostPath 卷的 Kubernetes 状态集
- android - Navigation Components popBackStack() 是否保留 Fragment 状态?