Compartir a través de


Complete-Transaction

Confirma la transacción activa.

Sintaxis

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

Description

El cmdlet Complete-Transaction confirma una transacción activa. Al confirmar una transacción, se finalizan los comandos de la transacción y se cambian los datos afectados por los comandos.

Si la transacción incluye varios suscriptores, para confirmar la transacción, debe escribir una comando Complete-Transaction para cada comando de Start-Transaction.

El cmdlet Complete-Transaction es uno de los conjuntos de cmdlets que admiten la característica de transacciones en Windows PowerShell. Para obtener más información, consulte about_Transactions.

Ejemplos

Ejemplo 1: Confirmar una transacción

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

En este ejemplo se muestra lo que sucede cuando se usa el cmdlet Complete-Transaction para confirmar una transacción.

El comando Start-Transaction inicia la transacción. El comando New-Item usa el parámetro UseTransaction para incluir el comando en la transacción.

El primer comando dir (Get-ChildItem) muestra que el nuevo elemento aún no se ha agregado al Registro.

El comando Complete-Transaction confirma la transacción, lo que hace que el registro cambie en vigor. Como resultado, el segundo comando dir muestra que se cambia el registro.

Ejemplo 2: Confirmar una transacción que tenga más de un suscriptor

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}

En este ejemplo se muestra cómo usar Complete-Transaction para confirmar una transacción que tenga más de un suscriptor.

Para confirmar una transacción de varios suscriptores, debe escribir una comando Complete-Transaction para cada comando Start-Transaction. Los datos solo se cambian cuando se envía el comando final Complete-Transaction.

Para fines de demostración, en este ejemplo se muestra una serie de comandos especificados en la línea de comandos. En la práctica, es probable que las transacciones se ejecuten en scripts, con la transacción secundaria que ejecuta una función o un script auxiliar al que llama el script principal.

En este ejemplo, un comando Start-Transaction inicia la transacción. Un comando New-Item con el parámetro UseTransaction agrega la clave MyCompany a la clave software. Aunque el cmdlet New-Item devuelve un objeto de clave, los datos del Registro aún no se han cambiado.

Un segundo comando Start-Transaction agrega un segundo suscriptor a la transacción existente. El cmdlet Get-Transaction confirma que el número de suscriptores es 2. Un comando New-ItemProperty con el parámetro UseTransaction agrega una entrada del Registro a la nueva clave MyCompany. De nuevo, el comando devuelve un valor, pero no se cambia el registro.

El primer comando Complete-Transaction reduce el número de suscriptores en 1. Esto se confirma mediante un comando Get-Transaction. Sin embargo, no se cambia ningún dato, como se evidencia en un comando dir m* (comando Get-ChildItem).

El segundo comando Complete-Transaction confirma toda la transacción y cambia los datos del Registro. Esto se confirma mediante un segundo comando dir m*, que muestra los cambios.

Ejemplo 3: Realizar una transacción que no cambie ningún dato

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

En este ejemplo se muestra el valor de usar comandos Get-* y otros comandos que no cambian los datos en una transacción. Cuando se usa un comando Get-* en una transacción, obtiene los objetos que forman parte de la transacción. Esto le permite obtener una vista previa de los cambios en la transacción antes de confirmar los cambios.

En este ejemplo, se inicia una transacción. Un comando New-Item con el parámetro UseTransaction agrega una nueva clave al Registro como parte de la transacción.

Dado que la nueva clave del Registro no se agrega al Registro hasta que se ejecuta el comando Complete-Transaction , se muestra el registro sin la nueva clave un comando dir (Get-ChildItem).

Sin embargo, al agregar el parámetro UseTransaction al comando dir, el comando se convierte en parte de la transacción y obtiene los elementos de la transacción incluso si aún no se agregan a los datos.

Parámetros

-Confirm

Le pide confirmación antes de ejecutar el cmdlet.

Tipo:SwitchParameter
Alias:cf
Posición:Named
Valor predeterminado:False
Requerido:False
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

-WhatIf

Muestra lo que sucedería si el cmdlet se ejecuta. El cmdlet no se ejecuta.

Tipo:SwitchParameter
Alias:wi
Posición:Named
Valor predeterminado:False
Requerido:False
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

Entradas

None

No se pueden canalizar objetos a este cmdlet.

Salidas

None

Este cmdlet no genera ninguna salida.

Notas

  • No se puede revertir una transacción confirmada o confirmar una transacción que se ha revertido.

    No se puede revertir ninguna transacción que no sea la transacción activa. Para revertir una transacción diferente, primero debe confirmar o revertir la transacción activa.

    De forma predeterminada, si no se puede confirmar alguna parte de una transacción, como cuando un comando de la transacción produce un error, se revierte toda la transacción.