Complete-Transaction

提交活动事务。

语法

Complete-Transaction
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]

说明

Complete-Transaction cmdlet 提交活动事务。 在提交事务时,该事务中的命令将完成,并且受这些命令影响的数据将发生更改。

如果事务包括多个订阅者,则若要提交该事务,必须为每个Start-Transaction命令都输入一条Complete-Transaction命令。

Complete-Transaction cmdlet 是 Windows PowerShell 中支持事务功能的一组 cmdlet 之一。 有关详细信息,请参阅 about_Transactions

示例

示例 1:提交事务

Set-Location hkcu:\software
Start-Transaction
New-Item MyCompany -UseTransaction
Get-ChildItem m*

Hive: HKEY_CURRENT_USER\software

SKC  VC Name                           Property
---  -- ----                           --------
82   1 Microsoft                      {(default)}

Complete-Transaction
Get-ChildItem 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参数将该命令包括在事务中。

第一条Get-ChildItem命令显示新项尚未添加到注册表中。

Complete-Transaction命令将提交事务,这使注册表更改生效。 因而,第二条Get-ChildItem命令显示注册表已更改。

示例 2:提交具有多个订阅者的事务

Set-Location hkcu:\software
Start-Transaction
New-Item MyCompany -UseTransaction

Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
0   0 MyCompany                      {}

Start-Transaction
Get-Transaction

RollbackPreference   SubscriberCount  Status
------------------   ---------------  ------
Error                2                Active

New-ItemProperty -Path MyCompany -Name MyKey -Value -UseTransaction

MyKey
-----
123

Complete-Transaction
Get-Transaction

RollbackPreference   SubscriberCount  Status
------------------   ---------------  ------
Error                1                Active

Get-ChildItem m*

Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
82   1 Microsoft                      {(default)}

Complete-Transaction
Get-ChildItem 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 cmdlet 返回项对象,但注册表中的数据尚未更改。

第二条Start-Transaction命令将第二个订阅者添加到现有事务中。 Get-Transaction cmdlet 确认订阅者计数为 2。 带有UseTransaction参数的 New-ItemProperty 命令将注册表项添加到新的 MyCompany 项中。 该命令再次返回一个值,但注册表未发生更改。

第一条Complete-Transaction命令将订阅者计数减少 1 个。 Get-Transaction命令确认了这一点。 但是,任何数据都未发生更改,如Get-ChildItem m*命令显示。

第二条Complete-Transaction命令提交整个事务并更改注册表中的数据。 可以通过显示更改的第二条Get-ChildItem m*命令对此进行确认。

示例 3:执行不更改任何数据的事务

Set-Location hkcu:\software
Start-Transaction
New-Item MyCompany -UseTransaction
Get-ChildItem m*

Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
82   1 Microsoft                      {(default)}

Get-ChildItem m* -UseTransaction

Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
82   1 Microsoft                      {(default)}
0   0 MyCompany                      {}

Complete-Transaction

此示例演示在事务中使用 Get-* 命令以及不会更改数据的其他命令的值。 在事务中使用Get-\*命令时,它将获取属于该事务的对象。 这样,在提交更改之前,可以预览事务中的更改。

在此示例中,将启动一个事务。 带有UseTransaction参数的 New-Item 命令向注册表中添加新项作为该事务的一部分。

因为新注册表项在运行Complete-Transaction命令后才会添加到注册表中,所以简单的Get-ChildItem命令将显示不包含新项的注册表。

然而,如果将UseTransaction参数添加到Get-ChildItem命令中,则该命令将成为事务的一部分,并且它会获取该事务中的项,即使尚未将这些项添加到数据中也是如此。

参数

-Confirm

提示你在运行 cmdlet 之前进行确认。

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

显示运行该 cmdlet 时会发生什么情况。 cmdlet 未运行。

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

输入

None

不能通过管道将对象传递给此 cmdlet。

输出

None

此 cmdlet 将不生成任何输出。

备注

  • 无法回滚已提交的事务,或提交已回滚的事务。

    不能回滚活动事务之外的任何事务。 若要回滚其他事务,必须首先提交或回滚活动事务。

    默认情况下,如果无法提交事务的任何部分(例如,当事务中的某个命令产生错误时),则将回滚整个事务。