首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果上一个脚本成功,则执行另一个powershell脚本

问如果上一个脚本成功,则执行另一个powershell脚本
EN

Stack Overflow用户
提问于 2022-05-20 14:39:46
回答 2查看 480关注 0票数 1

我知道这听起来很普遍,但仍然无法为我的用例找到解决方案。我想要做的是,我从一个文件中调用一个又一个的powershell,说“测试”,脚本A和脚本B

代码语言:javascript
复制
......
ScriptA.ps1
ScriptB.ps1
.....other stuff

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

查找退出代码,但不确定如何在“测试”中收集,类似于

代码语言:javascript
复制
......
ScriptA.ps1----returns exit code 1
if(exit code!=1)
{
  ScriptB.ps1
}
else
{
  "Cant execute due to error"
}
.....other stuff
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-20 15:49:41

如果您的.ps1脚本通过非零退出代码(通过exit语句)通信失败,则必须使用变量检查这样的退出代码:

代码语言:javascript
复制
.\ScriptA.ps1
if ($LASTEXITCODE -eq 0) {
  .\ScriptB.ps1
}
# ...

在PowerShell (Core) 7+中,您可以更简单地使用&&,即管道链和操作人员

代码语言:javascript
复制
# PowerShell 7+ only.
.\ScriptA.ps1 && .\ScriptB.ps1  # Execute ScriptB only if ScriptA succeeded.
票数 1
EN

Stack Overflow用户

发布于 2022-05-20 14:48:16

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

代码语言:javascript
复制
$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
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72320779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档