如果前一个成功,则执行另一个 powershell 脚本

Execute the other powershell script if the previous one is successful only

我知道这听起来很常见,但即使搜索也无法为我的用例找到解决方案。 我想做的是从一个文件中调用一个又一个 powershell 说“测试” 和脚本脚本 A 和脚本 B

......
ScriptA.ps1
ScriptB.ps1
.....other stuff

现在,如果我的 scriptA 成功执行,那么 ScriptB 应该执行,但如果 ScriptA 抛出任何我已经在 ScriptA 中放入 try/catch 块的异常,则 ScriptB 不应执行。 但是我无法强制执行“测试”中的任何检查以停止执行 ScriptB。ps1。

寻找退出代码但不确定如何在“测试”中收集回来,例如

......
ScriptA.ps1----returns exit code 1
if(exit code!=1)
{
  ScriptB.ps1
}
else
{
  "Cant execute due to error"
}
.....other stuff

使用循环语句(如 foreach($thing in $collection){...})连续调用每个脚本,然后在失败时跳出循环 - 您可以通过检查 $? 自动变量来评估:

$failed = $false
foreach($scriptFile in Get-ChildItem -Filter Script*.ps1){
    & $scriptFile.FullName
    if(-not $?){
      $failed = $true
      break
    }
}

if($failed){
    # handle failure (exit/return or whatever is appropriate)
} else {
    # success, continue here
}

如果您的 .ps1 脚本通过非零 退出代码 传达失败 - 通过 exit 语句 - 您必须使用 automatic $LASTEXITCODE variable 来检查对于这样的退出代码:

.\ScriptA.ps1
if ($LASTEXITCODE -eq 0) {
  .\ScriptB.ps1
}
# ...

PowerShell (Core) 7+中,您可以更简单地使用&&pipeline-chain AND operator:

# PowerShell 7+ only.
.\ScriptA.ps1 && .\ScriptB.ps1  # Execute ScriptB only if ScriptA succeeded.