Start-Transaction
Avvia una transazione.
Sintassi
Default (Impostazione predefinita)
Start-Transaction
[-Timeout <Int32>]
[-Independent]
[-RollbackPreference <RollbackSeverity>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Descrizione
Il cmdlet Start-Transaction avvia una transazione, ovvero una serie di comandi gestiti come unità. È possibile completare o eseguire il commit di una transazione. In alternativa, può essere completamente annullata o eseguito il rollback, in modo che tutti i dati modificati dalla transazione vengano ripristinati nello stato originale. Poiché i comandi in una transazione vengono gestiti come unità, viene eseguito il commit di tutti i comandi o viene eseguito il rollback di tutti i comandi.
Per impostazione predefinita, se un comando nella transazione genera un errore, viene eseguito automaticamente il rollback delle transazioni. È possibile usare il parametro RollbackPreference per modificare questo comportamento.
I cmdlet usati in una transazione devono essere progettati per supportare le transazioni. I cmdlet che supportano le transazioni hanno un parametro UseTransaction. Per eseguire transazioni in un provider, il provider deve supportare le transazioni. Il provider del Registro di sistema di Windows PowerShell in Windows Vista e versioni successive del sistema operativo Windows supporta le transazioni. È anche possibile usare la classe Microsoft.PowerShell.Commands.Management.TransactedString per includere espressioni nelle transazioni in qualsiasi versione del sistema Windows che supporta Windows PowerShell. Altri provider di Windows PowerShell possono supportare anche le transazioni.
Una sola transazione può essere attiva alla volta. Se si avvia una nuova transazione indipendente mentre è in corso una transazione, la nuova transazione diventa la transazione attiva ed è necessario eseguire il commit o il rollback della nuova transazione prima di apportare modifiche alla transazione originale.
Il cmdlet Start-Transaction fa parte di un set di cmdlet che supportano la funzionalità delle transazioni in Windows PowerShell. Per ulteriori informazioni, vedere about_Transactions.
Esempio
Esempio 1: Avviare ed eseguire il rollback di una transazione
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
Questi comandi avviano e quindi esegue il rollback di una transazione. Poiché viene eseguito il rollback della transazione, non vengono apportate modifiche al Registro di sistema.
Esempio 2: Avviare e completare una transazione
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
Questi comandi iniziano e quindi completano una transazione. Non vengono apportate modifiche al Registro di sistema fino a quando non viene utilizzato il comando Complete-Transaction .
Esempio 3: Usare preferenze di rollback diverse
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
In questo esempio viene illustrato l'effetto della modifica del valore del parametro RollbackPreference.
Nel primo set di comandi, Start-Transaction non utilizza RollbackPreference. Di conseguenza, viene usato il valore predefinito (Errore). Quando si verifica un errore in un comando di transazione, ovvero il percorso specificato non esiste, viene eseguito automaticamente il rollback della transazione.
Nel secondo set di comandi, Start-Transaction utilizza RollbackPreference con un valore di Never. Di conseguenza, quando si verifica un errore in un comando di transazione, la transazione è ancora attiva e può essere completata correttamente.
Poiché la maggior parte delle transazioni deve essere eseguita senza errori, il valore predefinito di RollbackPreference è in genere preferibile.
Esempio 4: Usare questo cmdlet mentre è in corso una transazione
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
In questo esempio viene illustrato l'effetto dell'utilizzo di Start-Transaction mentre è in corso una transazione. L'effetto è molto simile al join della transazione in corso.
Anche se si tratta di un comando semplificato, questo scenario si verifica spesso quando la transazione comporta l'esecuzione di uno script che include una transazione completa.
Il primo comando Start-Transaction avvia la transazione. Il primo comando New-Item fa parte della transazione.
Il secondo comando Start-Transaction aggiunge un nuovo sottoscrittore alla transazione. Il comando Get-Transaction restituisce ora una transazione con un numero di sottoscrittori pari a 2. Il secondo comando New-Item fa parte della stessa transazione.
Non vengono apportate modifiche al Registro di sistema fino al completamento dell'intera transazione. Per completare la transazione, è necessario immettere due comandi Complete-Transaction , uno per ogni sottoscrittore. Se si esegue il rollback della transazione in qualsiasi momento, verrà eseguito il rollback di tutte le transazioni per entrambi i sottoscrittori.
Esempio 5: Avviare una transazione indipendente mentre è in corso
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}
In questo esempio viene illustrato l'effetto dell'utilizzo del parametro Independent di Start-Transaction per avviare una transazione mentre è in corso un'altra transazione. In questo caso, viene eseguito il rollback della nuova transazione senza influire sulla transazione originale.
Anche se le transazioni sono logicamente indipendenti, poiché è possibile attivare una sola transazione alla volta, è necessario eseguire il rollback o eseguire il commit della transazione più recente prima di riprendere il lavoro sulla transazione originale.
Il primo set di comandi avvia una transazione. Il comando New-Item fa parte della prima transazione.
Nel secondo set di comandi, il comando Start-Transaction utilizza il parametro Independent . Il comando Get-Transaction seguente mostra l'oggetto transazione per la transazione attiva, che è la più recente. Il numero di sottoscrittori è uguale a 1, che indica che le transazioni non sono correlate.
Quando viene eseguito il rollback della transazione attiva utilizzando un comando Undo-Transaction , la transazione originale diventa nuovamente attiva.
Il comando New-ItemProperty , che fa parte della transazione originale, viene completato senza errori e la transazione originale può essere completata utilizzando il comando Complete-Transaction . Di conseguenza, il Registro di sistema viene modificato.
Esempio 6: Eseguire comandi che non fanno parte di una transazione
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 {}
In questo esempio viene illustrato che i comandi inviati mentre è in corso una transazione possono essere inclusi nella transazione o non inclusi. Solo i comandi che usano il parametro UseTransaction fanno parte della transazione.
Il primo e il terzo comando New-Item utilizzano il parametro UseTransaction . Questi comandi fanno parte della transazione. Poiché il secondo comando New-Item non utilizza il parametro UseTransaction , non fa parte della transazione.
Il primo comando dir mostra l'effetto. Il secondo comando New-Item viene completato immediatamente, ma il primo e il terzo comando New-Item non sono effettivi fino a quando non viene eseguito il commit della transazione.
Il comando Complete-Transaction esegue il commit della transazione. Di conseguenza, il secondo comando dir mostra che tutti i nuovi elementi sono stati aggiunti al Registro di sistema.
Esempio 7: Eseguire il rollback di una transazione che non termina in un intervallo di tempo specificato
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
Questo comando utilizza il parametro Timeout di Start-Transaction per avviare una transazione che deve essere completata entro due minuti. Se la transazione non viene completata alla scadenza del timeout, viene eseguito automaticamente il rollback.
Quando scade il timeout, non si riceve una notifica, ma la proprietà Status dell'oggetto transazione è impostata su RolledBack e i comandi che usano il parametro UseTransaction hanno esito negativo.
Parametri
-Confirm
Richiede conferma prima di eseguire il cmdlet.
Proprietà dei parametri
| Tipo: | SwitchParameter |
| Valore predefinito: | False |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
| Alias: | cfr |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-Independent
Indica che questo cmdlet avvia una transazione indipendente da qualsiasi transazione in corso. Per impostazione predefinita, se si utilizza Start-Transaction mentre è in corso un'altra transazione, viene aggiunto un nuovo sottoscrittore alla transazione in corso. Questo parametro ha effetto solo quando una transazione è già in corso nella sessione.
Per impostazione predefinita, se si utilizza Start-Transaction mentre è in corso una transazione, l'oggetto transazione esistente viene riutilizzato e il numero di sottoscrittori viene incrementato. L'effetto è molto simile al join della transazione originale. Un comando Undo-Transaction esegue il rollback dell'intera transazione. Per completare la transazione, è necessario immettere un comando Complete-Transaction per ogni sottoscrittore. Poiché la maggior parte delle transazioni in corso contemporaneamente è correlata, l'impostazione predefinita è sufficiente per la maggior parte degli utilizzi.
Se si specifica il parametro Independent, questo cmdlet crea una nuova transazione che può essere completata o annullata senza influire sulla transazione originale. Tuttavia, poiché una sola transazione può essere attiva alla volta, è necessario completare o eseguire il rollback della nuova transazione prima di riprendere il lavoro sulla transazione originale.
Proprietà dei parametri
| Tipo: | SwitchParameter |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-RollbackPreference
Specifica le condizioni in cui viene eseguito automaticamente il rollback di una transazione. I valori accettabili per questo parametro sono:
- Errore. Se si verifica un errore fatale o non fatiscente, viene eseguito automaticamente il rollback della transazione.
- TerminatingError. Se si verifica un errore irreversibile, viene eseguito automaticamente il rollback della transazione.
- Mai. Il rollback della transazione non viene mai eseguito automaticamente.
Il valore predefinito è Error.
Proprietà dei parametri
| Tipo: | RollbackSeverity |
| Valore predefinito: | None |
| Valori accettati: | Error, TerminatingError, Never |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-Timeout
Specifica il tempo massimo, espresso in minuti, in cui la transazione è attiva. Quando scade il timeout, viene eseguito automaticamente il rollback della transazione.
Per impostazione predefinita, non è previsto alcun timeout per le transazioni avviate dalla riga di comando. Quando le transazioni vengono avviate da uno script, il timeout predefinito è di 30 minuti.
Proprietà dei parametri
| Tipo: | Int32 |
| Valore predefinito: | None |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
| Alias: | TimeoutMins |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-WhatIf
Mostra gli effetti dell'esecuzione del cmdlet. Il cmdlet non viene eseguito.
Proprietà dei parametri
| Tipo: | SwitchParameter |
| Valore predefinito: | False |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
| Alias: | Wi |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
CommonParameters
Questo cmdlet supporta i parametri comuni: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Per altre informazioni, vedi about_CommonParameters.
Input
None
Non è possibile inviare tramite pipe l'input a questo cmdlet.
Output
None
Questo cmdlet non genera alcun output.