Complete-Transaction
提交活动事务。
语法
Complete-Transaction
[-WhatIf]
[-Confirm]
[<CommonParameters>]
说明
Complete-Transaction cmdlet 提交活动事务。 在提交事务时,该事务中的命令将完成,并且受这些命令影响的数据将发生更改。
如果事务包含多个订阅者,则必须为每个 Start-Transaction 命令输入一个 Complete-Transaction 命令才能提交事务。
Complete-Transaction cmdlet 是支持 Windows PowerShell 中的事务功能的一组 cmdlet 之一。 有关详细信息,请参阅 about_Transactions。
示例
示例 1:提交事务
PS C:\> 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:提交具有多个订阅服务器的事务
PS C:\> 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 cmdlet 返回键对象,但注册表中的数据尚未更改。
第二个 Start-Transaction 命令将另一个订阅服务器添加到现有事务。 Get-Transaction cmdlet 确认订阅者计数为 2。 具有 UseTransaction 参数的 New-ItemProperty 命令将注册表项添加到新的 MyCompany 项。 该命令再次返回一个值,但注册表未发生更改。
第一个 Complete-Transaction 命令将订阅者计数减少 1。 这通过 Get-Transaction 命令进行确认。 但是,不会更改任何数据,如 dir m* (Get-ChildItem) 命令所示。
第二个 Complete-Transaction 命令提交整个事务并更改注册表中的数据。 这由第二个 dir m* 命令确认,该命令显示更改。
示例 3:执行不更改任何数据的事务
PS C:\> 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 命令时,命令将成为事务的一部分,并且它获取事务中的项,即使这些项尚未添加到数据中。
参数
-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 将不生成任何输出。
备注
无法回滚已提交的事务,或提交已回滚的事务。
不能回滚活动事务之外的任何事务。 若要回滚其他事务,必须首先提交或回滚活动事务。
默认情况下,如果无法提交事务的任何部分(例如,当事务中的某个命令产生错误时),则将回滚整个事务。