powershell - 以原子方式运行 powershell 命令

标签 powershell atomic

我有 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/

相关文章:

list - PowerShell脚本从列表中删除文件和已删除文件的输出列表

amazon-web-services - 使用具有多个证书的 Invoke-WebRequest 在 PowerShell 中重写 CURL

azure - Get-AzDiagnosticSetting - 操作返回无效状态代码 'Forbidden'

通过 HTTPS 的 Powershell Invoke-RestMethod

winapi - 当应用程序保持文件锁定时 ReplaceFile 替代方案

c++ - 我必须明确调用原子加载/存储吗?

xml - Powershell XML 属性命名空间

python - 在 python sqlite3 模块中提交行为和原子性

c++ - volatile 但不 protected 读取能否产生无限期的陈旧值? (在真实硬件上)

c++ - C++11 中原子变量的复制初始化