提交活动事务。
语法
Complete-Transaction [-Confirm] [-WhatIf] [<CommonParameters>]
说明
Complete-Transaction cmdlet 将提交活动事务。在提交事务时,该事务中的命令将完成,并且受这些命令影响的数据将发生更改。
如果事务包括多个订阅者,则要提交该事务,必须为每个 Start-Transaction 命令都输入一个 Complete-Transaction 命令。
Complete-Transaction cmdlet 是 Windows PowerShell 中支持事务功能的一组 cmdlet 之一。有关详细信息,请参阅 about_Transactions。
参数
-Confirm
在执行命令之前提示您进行确认。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
-WhatIf
描述如果执行该命令会发生什么情况(无需实际执行该命令)。
是否为必需? |
false |
位置? |
named |
默认值 |
|
是否接受管道输入? |
false |
是否接受通配符? |
false |
<CommonParameters>
此 cmdlet 支持通用参数:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。有关详细信息,请参阅 about_Commonparameters.
输入和输出
输入类型是指可通过管道传递给 cmdlet 的对象的类型。返回类型是指 Cmdlet 所返回对象的类型。
输入 |
None 不能通过管道将对象传递给 Complete-Transaction。 |
输出 |
None 此 cmdlet 不返回任何对象。 |
说明
无法回滚已提交的事务,或提交已回滚的事务。
不能回滚活动事务之外的任何事务。要回滚其他事务,必须首先提交或回滚活动事务。
默认情况下,如果无法提交事务的任何部分(例如,当事务中的某个命令产生错误时),则将回滚整个事务。
示例 1
C:\PS>cd hkcu:\software PS HKCU:\software> start-transaction PS HKCU:\software> new-item MyCompany -UseTransaction PS HKCU:\software> dir m* Hive: HKEY_CURRENT_USER\software SKC VC Name Property --- -- ---- -------- 82 1 Microsoft {(default)} PS HKCU:\software> complete-transaction PS HKCU:\software> dir m* Hive: HKEY_CURRENT_USER\Software SKC VC Name Property --- -- ---- -------- 82 1 Microsoft {(default)} 0 0 MyCompany {} 说明 ----------- 此示例演示了使用 Complete-Transaction cmdlet 来提交事务的效果。 Start-Transaction 命令将启动事务。New-Item 命令使用 UseTransaction 参数将该命令包括在事务中。 第一个“dir”(Get-ChildItem) 命令显示新项尚未添加到注册表中。 Complete-Transaction 命令将提交事务,这使注册表更改生效。因而,第二个“dir”命令显示注册表已更改。
示例 2
C:\PS>cd hkcu:\software PS HKCU:\software> start-transaction PS HKCU:\software> new-item MyCompany -UseTransaction Hive: HKEY_CURRENT_USER\Software SKC VC Name Property --- -- ---- -------- 0 0 MyCompany {} PS HKCU:\software> start-transaction PS HKCU:\Software> Get-Transaction RollbackPreference SubscriberCount Status ------------------ --------------- ------ Error 2 Active PS HKCU:\software> new-itemproperty -path MyCompany -name MyKey -value -UseTransaction MyKey ----- 123 PS HKCU:\software> complete-transaction PS HKCU:\software> get-transaction RollbackPreference SubscriberCount Status ------------------ --------------- ------ Error 1 Active PS HKCU:\software> dir m* Hive: HKEY_CURRENT_USER\Software SKC VC Name Property --- -- ---- -------- 82 1 Microsoft {(default)} PS HKCU:\software> complete-transaction PS HKCU:\software> dir m* Hive: HKEY_CURRENT_USER\Software SKC VC Name Property --- -- ---- -------- 82 1 Microsoft {(default)} 0 1 MyCompany {MyKey} 说明 ----------- 此示例演示如何使用 Complete-Transaction 来提交拥有多个订阅者的事务。 要提交多订阅者事务,必须为每个 Start-Transaction 命令都输入一个 Complete-Transaction 命令。只有在提交最后一个 Complete-Transaction 命令时才会更改数据。 出于演示目的,此示例演示了一系列在命令行中输入的命令。实际上,事务很可能在脚本中运行,其中二级事务由主脚本调用的函数或助手脚本运行。 在此示例中,Start-Transaction 命令将启动事务。带有 UseTransaction 参数的 New-Item 命令将 MyCompany 项添加到 Software 项中。虽然 New-Item 命令返回项对象,但注册表中的数据尚未更改。 第二个 Start-Transaction 命令将第二个订阅者添加到现有事务中。Get-Transaction 命令确认订阅者计数为 2。带有 UseTransaction 参数的 New-ItemProperty 命令向新 MyCompany 项中添加注册表条目。该命令再次返回一个值,但注册表未发生更改。 第一个 Complete-Transaction 命令使订阅者计数减少 1。通过 Get-Transaction 命令对此进行确认。但是,任何数据都未发生更改,如“dir m*”(Get-ChildItem) 命令显示的。 第二个 Complete-Transaction 命令提交整个事务并更改注册表中的数据。可以通过显示更改的第二个“dir m*”命令对此进行确认。
示例 3
C:\PS>cd hkcu:\software PS HKCU:\software> start-transaction PS HKCU:\software> new-item MyCompany -UseTransaction PS HKCU:\software> dir m* Hive: HKEY_CURRENT_USER\Software SKC VC Name Property --- -- ---- -------- 82 1 Microsoft {(default)} PS HKCU:\software> dir m* -UseTransaction Hive: HKEY_CURRENT_USER\Software SKC VC Name Property --- -- ---- -------- 82 1 Microsoft {(default)} 0 0 MyCompany {} PS HKCU:\software> complete-transaction 说明 ----------- 此示例演示在事务中使用 Get-* 命令以及不会更改数据的其他命令的值。在事务中使用 Get-* 命令时,它将获取属于该事务的对象。这样,在提交更改之前,可以预览事务中的更改。 在此示例中,将启动一个事务。带有 UseTransaction 参数的 New-Item 命令向注册表中添加新项作为该事务的一部分。 因为新注册表项在运行 Complete-Transaction 命令后才会添加到注册表中,所以简单的“dir”(Get-ChildItem) 命令将显示不包含新项的注册表。 然而,如果将 UseTransaction 参数添加到“dir”命令中,则该命令将成为事务的一部分,并且它会获取该事务中的项,即使尚未将这些项添加到数据中也是如此。
另请参阅