Start-Transaction
Inicia una transacción.
Sintaxis
Default (valor predeterminado)
Start-Transaction
[-Timeout <Int32>]
[-Independent]
[-RollbackPreference <RollbackSeverity>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Description
El cmdlet Start-Transaction inicia una transacción, que es una serie de comandos que se administran como una unidad. Se puede completar una transacción o confirmarse. Como alternativa, puede deshacerse por completo o revertirse, de modo que los datos modificados por la transacción se restauren a su estado original. Dado que los comandos de una transacción se administran como una unidad, todos los comandos se confirman o todos los comandos se revierten.
De forma predeterminada, si algún comando de la transacción genera un error, las transacciones se revierten automáticamente. Puede usar el parámetro RollbackPreference para cambiar este comportamiento.
Los cmdlets usados en una transacción deben diseñarse para admitir transacciones. Los cmdlets que admiten transacciones tienen un parámetro UseTransaction. Para realizar transacciones en un proveedor, el proveedor debe admitir transacciones. El proveedor del Registro de Windows PowerShell en Windows Vista y versiones posteriores del sistema operativo Windows admite transacciones. También puede usar la clase Microsoft.PowerShell.Commands.Management.TransactedString para incluir expresiones en transacciones en cualquier versión del sistema Windows que admita Windows PowerShell. Otros proveedores de Windows PowerShell también pueden admitir transacciones.
Solo una transacción puede estar activa a la vez. Si inicia una transacción nueva e independiente mientras una transacción está en curso, la nueva transacción se convierte en la transacción activa y debe confirmar o revertir la nueva transacción antes de realizar cambios en la transacción original.
cmdlet Start-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: Iniciar y revertir una transacción
PS C:\> cd hkcu:\software
PS HKCU:\software> Start-Transaction
PS HKCU:\software> New-Item "ContosoCompany" -UseTransaction
PS HKCU:\software> New-ItemProperty "ContosoCompany" -Name "MyKey" -Value 123 -UseTransaction
PS HKCU:\software> Undo-Transaction
Estos comandos inician y, a continuación, revierten una transacción. Dado que la transacción se revierte, no se realizan cambios en el registro.
Ejemplo 2: Iniciar y completar una transacción
PS C:\> cd hkcu:\software
PS HKCU:\software> Start-Transaction
PS HKCU:\software> New-Item "ContosoCompany" -UseTransaction
PS HKCU:\software> New-ItemProperty "ContosoCompany" -Name "MyKey" -Value 123 -UseTransaction
PS HKCU:\software> Complete-Transaction
Estos comandos inician y, a continuación, completan una transacción.
No se realizan cambios en el registro hasta que se use el comando complete-Transaction
Ejemplo 3: Usar diferentes preferencias de reversión
PS C:\> cd HKCU:\software
PS HKCU:\software> Start-Transaction
PS HKCU:\software> New-Item -Path "NoPath" -Name "ContosoCompany" -UseTransaction
PS HKCU:\software> New-Item -Path . -Name "ContosoCompany" -UseTransaction
PS HKCU:\software> Start-Transaction -RollbackPreference never
PS HKCU:\software> New-Item -Path "NoPath" -Name "ContosoCompany" -UseTransaction
PS HKCU:\software> New-Item -Path . -Name "ContosoCompany" -UseTransaction
# Start-Transaction (-rollbackpreference error)
PS HKCU:\software> Start-Transaction
PS HKCU:\software> New-Item -Path "NoPath" -Name "ContosoCompany" -UseTransaction
New-Item : The registry key at the specified path does not exist.
At line:1 char:9
+ new-item <<<< -Path NoPath -Name ContosoCompany -UseTransaction
PS HKCU:\software> New-Item -Path . -Name "Contoso" -UseTransaction
New-Item : Cannot use transaction. The transaction has been rolled back or has timed out.
At line:1 char:9
+ new-item <<<< -Path . -Name ContosoCompany -UseTransaction
# Start-Transaction (-rollbackpreference never)
PS HKCU:\software> Start-Transaction -RollbackPreference never
PS HKCU:\software> New-Item -Path "NoPath" -Name "ContosoCompany" -UseTransaction
New-Item : The registry key at the specified path does not exist.
At line:1 char:9
+ new-item <<<< -Path NoPath -Name "ContosoCompany" -UseTransaction
PS HKCU:\software> New-Item -Path . -Name "ContosoCompany" -UseTransaction
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 0 ContosoCompany {}
PS HKCU:\Software> Complete-Transaction
# Succeeds
En este ejemplo se muestra el efecto de cambiar el valor del parámetro RollbackPreference.
En el primer conjunto de comandos, Start-Transaction no usa RollbackPreference. Como resultado, se usa el valor predeterminado (Error). Cuando se produce un error en un comando de transacción, es decir, la ruta de acceso especificada no existe, la transacción se revierte automáticamente.
En el segundo conjunto de comandos, start-Transaction usa rollbackPreference con un valor de Never. Como resultado, cuando se produce un error en un comando de transacción, la transacción sigue activa y se puede completar correctamente.
Dado que la mayoría de las transacciones deben realizarse sin errores, normalmente se prefiere el valor predeterminado de RollbackPreference.
Ejemplo 4: Uso de este cmdlet mientras una transacción está en curso
PS C:\> cd HKCU:\software
PS HKCU:\software> Start-Transaction
PS HKCU:\software> New-Item "ContosoCompany" -UseTransaction
PS HKCU:\software> Start-Transaction
PS HKCU:\software> Get-Transaction
PS HKCU:\software> New-Item "ContosoCompany2" -UseTransaction
PS HKCU:\software> Complete-Transaction
PS HKCU:\software> Complete-Transaction
PS HKCU:\Software> Get-Transaction
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 2 Active
En este ejemplo se muestra el efecto de usar start-Transaction mientras una transacción está en curso. El efecto es muy parecido a unir la transacción en curso.
Aunque se trata de un comando simplificado, este escenario se produce con frecuencia cuando la transacción implica ejecutar un script que incluye una transacción completa.
El primer comando Start-Transaction inicia la transacción. El primer comando New-Item forma parte de la transacción.
El segundo comando Start-Transaction agrega un nuevo suscriptor a la transacción. El comando Get-Transaction ahora devuelve una transacción con un número de suscriptores de 2. El segundo comando New-Item forma parte de la misma transacción.
No se realizan cambios en el Registro hasta que se complete toda la transacción. Para completar la transacción, debe escribir dos comandos Complete-Transaction, uno para cada suscriptor. Si fuera a revertir la transacción en cualquier momento, toda la transacción se revertiría para ambos suscriptores.
Ejemplo 5: Iniciar una transacción independiente mientras una está en curso
PS C:\> cd HKCU:\software
PS HKCU:\software> Start-Transaction
PS HKCU:\software> New-Item "ContosoCompany" -UseTransaction
PS HKCU:\software> Start-Transaction -Independent
PS HKCU:\software> Get-Transaction
PS HKCU:\software> Undo-Transaction
PS HKCU:\software> New-ItemProperty -Path "ContosoCompany" -Name "MyKey" -Value 123 -UseTransaction
PS HKCU:\software> Complete-Transaction
PS HKCU:\software> dir contoso*
PS HKCU:\Software> Get-Transaction
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 1 Active
PS HKCU:\software> Undo-Transaction
PS HKCU:\software> New-ItemProperty -Path "ContosoCompany" -Name "MyKey" -Value 123 -UseTransaction
MyKey
-----
123
PS HKCU:\software> Complete-Transaction
PS HKCU:\software> dir contoso*
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 1 MyCompany {MyKey}
En este ejemplo se muestra el efecto de usar el parámetro Independent de Start-Transaction para iniciar una transacción mientras otra transacción está en curso. En este caso, la nueva transacción se revierte sin afectar a la transacción original.
Aunque las transacciones son lógicamente independientes, porque solo una transacción puede estar activa a la vez, debe revertir o confirmar la transacción más reciente antes de reanudar el trabajo en la transacción original.
El primer conjunto de comandos inicia una transacción. El comando New-Item forma parte de la primera transacción.
En el segundo conjunto de comandos, el comando Start-Transaction usa el parámetro Independent. El comando Get-Transaction que sigue muestra el objeto de transacción para la transacción activa, que es la más reciente. El número de suscriptores es igual a 1, que muestra que las transacciones no están relacionadas.
Cuando la transacción activa se revierte mediante un comando Deshacer transacción, la transacción original vuelve a activarse.
El comando New-ItemProperty, que forma parte de la transacción original, finaliza sin error y la transacción original se puede completar mediante el comando Complete-Transaction. Como resultado, se cambia el registro.
Ejemplo 6: Ejecutar comandos que no forman parte de una transacción
PS C:\> cd hkcu:\software
PS HKCU:\software> Start-Transaction
PS HKCU:\software> New-Item "ContosoCompany1" -UseTransaction
PS HKCU:\software> New-Item "ContosoCompany2"
PS HKCU:\software> New-Item "ContosoCompany3" -UseTransaction
PS HKCU:\software> dir contoso*
PS HKCU:\software> Complete-Transaction
PS HKCU:\software> dir contoso*
PS HKCU:\Software> dir contoso*
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 0 ContosoCompany2 {}
PS HKCU:\Software> Complete-Transaction
PS HKCU:\Software> dir contoso*
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 0 ContosoCompany1 {}
0 0 ContosoCompany2 {}
0 0 ContosoCompany3 {}
En este ejemplo se muestra que los comandos que se envían mientras una transacción está en curso se pueden incluir en la transacción o no se incluyen. Solo los comandos que usan el parámetro UseTransaction forman parte de la transacción.
El primer y el tercer
El primer comando dir muestra el efecto. El segundo comando New-Item se completa inmediatamente, pero el primero y el tercero comandos new-Item no son efectivos hasta que se confirme la transacción.
El comando Complete-Transaction confirma la transacción. Como resultado, el segundo comando dir muestra que todos los nuevos elementos se agregan al Registro.
Ejemplo 7: Revertir una transacción que no finaliza en un tiempo especificado
PS C:\> Start-Transaction -Timeout 2
# Wait two minutes...
PS C:\> Get-Transaction
PS C:\> New-Item HKCU:\Software\ContosoCompany -UseTransaction
PS C:\> Start-Transaction -Timeout 2
# Wait two minutes...
PS C:\> > Get-Transaction
RollbackPreference SubscriberCount Status
------------------ --------------- -----------
Error 1 RolledBack
PS C:\> New-Item HKCU:\Software\ContosoCompany -UseTransaction
New-Item : Cannot use transaction. The transaction has been rolled back or has timed out.
At line:1 char:9
+ new-item <<<< MyCompany -UseTransaction
Este comando usa el parámetro Timeout de Start-Transaction para iniciar una transacción que debe completarse en dos minutos. Si la transacción no finaliza cuando expira el tiempo de espera, se revierte automáticamente.
Cuando expire el tiempo de espera, no se le notificará, pero la propiedad Status
Parámetros
-Confirm
Le pide confirmación antes de ejecutar el cmdlet.
Propiedades de parámetro
| Tipo: | SwitchParameter |
| Valor predeterminado: | False |
| Admite caracteres comodín: | False |
| DontShow: | False |
| Alias: | cf |
Conjuntos de parámetros
(All)
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-Independent
Indica que este cmdlet inicia una transacción que es independiente de las transacciones en curso. De forma predeterminada, si usa start-Transaction mientras otra transacción está en curso, se agrega un nuevo suscriptor a la transacción en curso. Este parámetro tiene un efecto solo cuando una transacción ya está en curso en la sesión.
De forma predeterminada, si usa start-Transaction mientras una transacción está en curso, se reutiliza el objeto de transacción existente y se incrementa el recuento de suscriptores. El efecto es muy parecido a unir la transacción original. Un comando Undo-Transaction revierte toda la transacción. Para completar la transacción, debe escribir un comando Complete-Transaction para cada suscriptor. Dado que la mayoría de las transacciones que están en curso al mismo tiempo están relacionadas, el valor predeterminado es suficiente para la mayoría de los usos.
Si especifica el parámetro independent, este cmdlet crea una nueva transacción que se puede completar o deshacer sin afectar a la transacción original. Sin embargo, dado que solo una transacción puede estar activa a la vez, debe completar o revertir la nueva transacción antes de reanudar el trabajo en la transacción original.
Propiedades de parámetro
| Tipo: | SwitchParameter |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
(All)
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-RollbackPreference
Especifica las condiciones en las que se revierte automáticamente una transacción. Los valores aceptables para este parámetro son:
- Error. La transacción se revierte automáticamente si se produce un error de terminación o no terminación.
- TerminatingError. La transacción se revierte automáticamente si se produce un error de terminación.
- Nunca. La transacción nunca se revierte automáticamente.
El valor predeterminado es Error.
Propiedades de parámetro
| Tipo: | RollbackSeverity |
| Valor predeterminado: | None |
| Valores aceptados: | Error, TerminatingError, Never |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
(All)
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-Timeout
Especifica el tiempo máximo, en minutos, que la transacción está activa. Cuando expira el tiempo de espera, la transacción se revierte automáticamente.
De forma predeterminada, no hay tiempo de espera para las transacciones que se inician en la línea de comandos. Cuando un script inicia las transacciones, el tiempo de espera predeterminado es de 30 minutos.
Propiedades de parámetro
| Tipo: | Int32 |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
| Alias: | TimeoutMins |
Conjuntos de parámetros
(All)
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-WhatIf
Muestra lo que sucedería si el cmdlet se ejecuta. El cmdlet no se ejecuta.
Propiedades de parámetro
| Tipo: | SwitchParameter |
| Valor predeterminado: | False |
| Admite caracteres comodín: | False |
| DontShow: | False |
| Alias: | Wi |
Conjuntos de parámetros
(All)
| Posición: | Named |
| Obligatorio: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
CommonParameters
Este cmdlet admite los parámetros comunes: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction y -WarningVariable. Para obtener más información, vea about_CommonParameters.
Entradas
None
No se puede canalizar la entrada a este cmdlet.
Salidas
None
Este cmdlet no genera ningún resultado.