如果前一个成功,则执行另一个 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.
我知道这听起来很常见,但即使搜索也无法为我的用例找到解决方案。 我想做的是从一个文件中调用一个又一个 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.