我有 3 个 powershell 命令需要同步运行,因为我需要将输出从第一个命令传递到第二个命令,依此类推。但是,如果出现任何失败,我需要退出所有 3 个操作。是否有 cmdlet 或技术可以在 powershell 中启用此行为?
最佳答案
您可以将每个命令包装在一个对象或哈希表中,并带有相应的“回滚”操作和测试:
$Commands = @(
@{
Action = { Set-Value $PathOne "newValue" }
RollBack = { Set-Value $PathOne "oldValue" }
Test = { Test-Something }
}
@{
Action = { Set-Value $PathTwo "newValue" }
RollBack = { Set-Value $PathTwo "oldValue" }
Test = { Test-Something }
}
)
然后使用 Stack<Scriptblock>
跟踪发生“回滚”时需要执行的操作
$RollbackStack = [System.Collections.Generic.Stack[Scriptblock]]::new()
foreach($Command in $Commands){
# Execute command
& $Command.Action
# Add rollback action to stack
$RollbackStack.Push($Command.Rollback)
# Test result, roll back if failed
if(-not(& $Command.Test)){
foreach($rollbackAction in $RollbackStack){
& $rollbackAction
}
}
}
关于powershell - 以原子方式运行 powershell 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54351519/