Complete-Transaction

提交活动事务。

语法

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 所返回对象的类型。

输入

不能通过管道将对象传递给 Complete-Transaction。

输出

此 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”命令中,则该命令将成为事务的一部分,并且它会获取该事务中的项,即使尚未将这些项添加到数据中也是如此。





另请参阅

概念

about_Transactions
Start-Transaction
Get-Transaction
Undo-Transaction
Use-Transaction