Compartilhar via


Complete-Transaction

Confirma a transação ativa.

Syntax

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

Description

O Complete-Transaction cmdlet confirma uma transação ativa. Quando você confirma uma transação, os comandos nessa transação são finalizados e os dados afetados pelos comandos são alterados.

Se a transação incluir vários assinantes, para confirmar a transação, você deverá inserir um Complete-Transaction comando para cada Start-Transaction comando.

O Complete-Transaction cmdlet faz parte de um conjunto de cmdlets que oferecem suporte ao recurso de transações no Windows PowerShell. Para obter mais informações, consulte about_Transactions.

Exemplos

Exemplo 1: Confirmar uma transação

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                      {}

Este exemplo mostra o que acontece quando você usa o Complete-Transaction cmdlet para confirmar uma transação.

O Start-Transaction comando inicia a transação. O comando New-Item usa o parâmetro UseTransaction para incluir o comando na transação.

O primeiro Get-ChildItem comando mostra que o novo item ainda não foi adicionado ao registro.

O Complete-Transaction comando confirma a transação, o que torna a alteração do Registro efetiva. Como resultado, o segundo Get-ChildItem comando mostra que o registro foi alterado.

Exemplo 2: Confirmar uma transação que tenha mais de um assinante

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}

Este exemplo mostra como usar Complete-Transaction para confirmar uma transação que tenha mais de um assinante.

Para confirmar uma transação de vários assinantes, você deve inserir um Complete-Transaction comando para cada Start-Transaction comando. Os dados são alterados somente quando o comando final Complete-Transaction é enviado.

Para fins de demonstração, este exemplo mostra uma série de comandos inseridos na linha de comando. Na prática, transações provavelmente serão executadas em scripts, com a transação secundária sendo executada por uma função ou script auxiliar que é chamado pelo script principal.

Neste exemplo, um Start-Transaction comando inicia a transação. Um New-Item comando com o parâmetro UseTransaction adiciona a chave MyCompany à chave Software. Embora o New-Item cmdlet retorne um objeto de chave, os dados no Registro ainda não foram alterados.

Um segundo Start-Transaction comando adiciona um segundo assinante à transação existente. O Get-Transaction cmdlet confirma que a contagem de assinantes é 2. Um comando New-ItemProperty com o parâmetro UseTransaction adiciona uma entrada do Registro à nova chave MyCompany. Novamente, o comando retorna um valor, mas o registro não é alterado.

O primeiro Complete-Transaction comando reduz a contagem de assinantes em 1. Isso é confirmado por um Get-Transaction comando. No entanto, nenhum dado é alterado, como evidenciado por um Get-ChildItem m* comando.

O segundo Complete-Transaction comando confirma toda a transação e altera os dados no registro. Isso é confirmado por um segundo Get-ChildItem m* comando, que mostra as alterações.

Exemplo 3: Executar uma transação que não altera nenhum dado

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

Este exemplo mostra o valor do uso de comandos Get-* e outros comandos que não alteram dados em uma transação. Quando um Get-\* comando é usado em uma transação, ele obtém os objetos que fazem parte da transação. Isso permite a você visualizar as alterações na transação antes de confirmá-las.

Neste exemplo, uma transação é iniciada. Um comando New-Item com o parâmetro UseTransaction adiciona uma nova chave ao Registro como parte da transação.

Como a nova chave do Registro não é adicionada ao Registro até que o Complete-Transaction comando seja executado, um comando simples Get-ChildItem mostra o Registro sem a nova chave.

No entanto, quando você adiciona o parâmetro UseTransaction ao Get-ChildItem comando, o comando se torna parte da transação e obtém os itens na transação mesmo que eles ainda não tenham sido adicionados aos dados.

Parâmetros

-Confirm

Solicita sua confirmação antes de executar o cmdlet.

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

-WhatIf

Mostra o que aconteceria se o cmdlet fosse executado. O cmdlet não é executado.

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

Entradas

None

Não é possível transferir objetos para esse cmdlet.

Saídas

None

Este cmdlet não gera saída.

Observações

  • Você não pode reverter uma transação que foi confirmada, nem confirmar uma transação que foi revertida.

    Você não pode reverter uma transação que não seja a transação ativa. Para reverter uma transação diferente, primeiro você deve confirmar ou reverter a transação ativa.

    Por padrão, se qualquer parte de uma transação não pode ser confirmada, como por exemplo quando um comando na transação resulta em um erro, a transação inteira é revertida.