在运行Powershell脚本后清除Transaction.Current

时间:2016-01-14 22:18:15

标签: c# powershell transactions

下面的代码(只是一个用于显示问题症结的精简示例。实际代码执行的更多)将在运行Powershell版本2的机器上抛出错误。

using (new TransactionScope(TransactionScopeOption.Required))
{
    using (var powershell = PowerShell.Create())
    {
        powershell.AddScript("");
        powershell.Invoke();
    }
}

抛出的错误是:

  

System.InvalidOperationException:在TransactionScope内部已更改Transaction.Current。

在创建powershell实例的using语句退出后,'Transaction.Current'变为空(如果您的机器具有PowerShell版本2,则Transaction.Current仍保留其事务)。通过在抑制的TransactionScope中使用statement包装powershell,我已经能够阻止它抛出异常:

using (new TransactionScope(TransactionScopeOption.Required))
{
    using (new TransactionScope(TransactionScopeOption.Suppress))
    {
        using (var powershell = PowerShell.Create())
        {
            powershell.AddScript("");
            powershell.Invoke();
        }
    }
}

但我希望运行的任何powershell脚本都是事务的一部分,而不是非事务性的,所以上面不是一个理想的解决方案。

还有其他想法吗?

0 个答案:

没有答案