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 密钥添加到软件密钥。 尽管 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 之前,提示你进行确认。

类型:SwitchParameter
别名:cf
Position:Named
默认值:False
必需:False
接受管道输入:False
接受通配符:False

-WhatIf

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

类型:SwitchParameter
别名:wi
Position:Named
默认值:False
必需:False
接受管道输入:False
接受通配符:False

输入

None

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

输出

None

此 cmdlet 不生成任何输出。

备注

  • 无法回滚已提交的事务,也不能提交已回滚的事务。

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

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