Avvia una transazione.
Sintassi
Start-Transaction [-Independent] [-RollbackPreference {<Error> | <TerminatingError> | <Never>}] [-Timeout <int>] [-Confirm] [-WhatIf] [<CommonParameters>]
Descrizione
Il cmdlet Start-Transaction avvia una transazione che è una serie di comandi gestiti come un'unità. È possibile completare (eseguire il commit) o annullare completamente (eseguire il rollback) una transazione, in modo che i dati modificati dalla transazione vengano ripristinati allo stato originale. Poiché i comandi in una transazione vengono gestiti come un'unità, viene eseguito il commit o il rollback di tutti i comandi.
Per impostazione predefinita, il rollback delle transazioni viene eseguito automaticamente se un qualsiasi comando nella transazione genera un errore, ma è possibile utilizzare il parametro RollbackPreference per modificare questo comportamento.
È necessario che i cmdlet utilizzati in una transazione siano progettati per supportare le transazioni. I cmdlet che supportano le transazioni hanno di un parametro UseTransaction. Per eseguire le transazioni in un provider, è necessario che il provider supporti le transazioni. Il provider Registro di sistema di Windows PowerShell in Windows Vista e versioni successive di Windows supporta le transazioni. È inoltre possibile utilizzare la classe Microsoft.PowerShell.Commands.Management.TransactedString per includere espressioni nelle transazioni in qualsiasi versione di Windows che supporti Windows PowerShell. Anche altri provider di Windows PowerShell supportano le transazioni.
Può essere attiva una sola transazione alla volta. Se si avvia una nuova transazione indipendente mentre è in corso una transazione, non ancora completata né annullata, la nuova transazione diventa attiva ed è necessario eseguirne il commit o il rollback 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.
Parametri
-Independent
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 conteggio dei sottoscrittori incrementato. L'effetto è analogo all'unione della transazione originale. Un comando Undo-Transaction esegue il rollback dell'intera transazione. Per completare la transazione, è necessario immettere un comando Complete-Transaction per ciascun sottoscrittore. Poiché la maggior parte delle transazioni in corso contemporaneamente è correlata, l'impostazione predefinita è sufficiente per la maggior parte degli utilizzi.
Se si utilizza il parametro Independent, viene creata una nuova transazione che può essere completata o annullata senza influire su quella originale. Tuttavia, poiché può essere attiva una sola transazione alla volta, è necessario completare o eseguire il rollback della nuova transazione prima di riprendere l'utilizzo di quella originale.
Obbligatorio? |
false |
Posizione? |
named |
Valore predefinito |
Reuse the original transaction object. |
Accettare input da pipeline? |
false |
Accettare caratteri jolly? |
false |
-RollbackPreference <RollbackSeverity>
Specifica le condizioni in base alle quali viene eseguito automaticamente il rollback di una transazione. Il valore predefinito è "Error".
I valori validi sono:
-- Error: il rollback della transazione viene eseguito automaticamente se si verifica un errore fatale o non fatale. "Error" è il valore predefinito.
-- Terminating error: il rollback della transazione viene eseguito automaticamente se si verifica un errore fatale.
-- Never: il rollback della transazione non viene mai eseguito automaticamente.
Obbligatorio? |
false |
Posizione? |
named |
Valore predefinito |
Error |
Accettare input da pipeline? |
false |
Accettare caratteri jolly? |
false |
-Timeout <int>
Specifica il tempo massimo di attività della transazione in minuti. Allo scadere del timeout viene eseguito automaticamente il rollback della transazione.
Per impostazione predefinita, non esiste alcun timeout per le transazioni avviate dalla riga di comando. Quando le transazioni vengono avviate da uno script, il timeout predefinito è 30 minuti.
Obbligatorio? |
false |
Posizione? |
named |
Valore predefinito |
No timeout (infinite) |
Accettare input da pipeline? |
false |
Accettare caratteri jolly? |
false |
-Confirm
Chiede una conferma prima di eseguire il comando.
Obbligatorio? |
false |
Posizione? |
named |
Valore predefinito |
|
Accettare input da pipeline? |
false |
Accettare caratteri jolly? |
false |
-WhatIf
Descrive ciò che accadrebbe se si eseguisse il comando senza eseguirlo realmente.
Obbligatorio? |
false |
Posizione? |
named |
Valore predefinito |
|
Accettare input da pipeline? |
false |
Accettare caratteri jolly? |
false |
<CommonParameters>
Questo cmdlet supporta i parametri comuni -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer e -OutVariable. Per ulteriori informazioni, vedere about_Commonparameters.
Input e output
Il tipo di input è il tipo degli oggetti che è possibile reindirizzare al cmdlet. Il tipo restituito è il tipo degli oggetti restituiti dal cmdlet.
Input |
Nessuno Non è possibile reindirizzare l'input a questo cmdlet. |
Output |
Nessuno Questo cmdlet non genera alcun output. |
Esempio 1
C:\PS>cd hkcu:\software PS HKCU:\software> start-transaction PS HKCU:\software> new-item MyCompany -UseTransaction PS HKCU:\software> new-itemproperty MyCompany -name MyKey -value 123 -UseTransaction PS HKCU:\software> undo-transaction Descrizione ----------- Questi comandi avviano ed eseguono il rollback di una transazione. Poiché viene eseguito il rollback della transazione, non viene apportata alcuna modifica al Registro di sistema.
Esempio 2
C:\PS>cd hkcu:\software PS HKCU:\software> start-transaction PS HKCU:\software> new-item MyCompany -UseTransaction PS HKCU:\software> new-itemproperty MyCompany -name MyKey -value 123 -UseTransaction PS HKCU:\software> complete-transaction Descrizione ----------- Questi comandi avviano e completano una transazione. Non viene apportata alcuna modifica al Registro di sistema fino all'utilizzo del comando Complete-Transaction.
Esempio 3
C:\PS>cd HKCU:\software PS HKCU:\software> start-transaction PS HKCU:\software> new-item -path NoPath -name MyCompany -UseTransaction PS HKCU:\software> new-item -path . -name MyCompany -UseTransaction PS HKCU:\software> start-transaction -RollbackPreference never PS HKCU:\software> new-item -path NoPath -name MyCompany -UseTransaction PS HKCU:\software> new-item -path . -name MyCompany -UseTransaction # Start-Transaction (-rollbackpreference error) PS HKCU:\software> start-transaction PS HKCU:\software> new-item -path NoPath -Name MyCompany -UseTransaction New-Item : The registry key at the specified path does not exist. At line:1 char:9 + new-item <<<< -path NoPath -Name MyCompany -UseTransaction PS HKCU:\software> new-item -path . -name MyCompany -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 MyCompany -UseTransaction # Start-Transaction (-rollbackpreference never) PS HKCU:\software> start-transaction -RollbackPreference never PS HKCU:\software> new-item -path NoPath -name MyCompany -UseTransaction New-Item : The registry key at the specified path does not exist. At line:1 char:9 + new-item <<<< -path NoPath -name MyCompany -UseTransaction PS HKCU:\software> new-item -path . -name MyCompany -UseTransaction Hive: HKEY_CURRENT_USER\Software SKC VC Name Property --- -- ---- -------- 0 0 MyCompany {} PS HKCU:\Software> complete-transaction # Succeeds Descrizione ----------- In questo esempio viene illustrato l'effetto della modifica del valore del parametro RollbackPreference. Nel primo set di comandi, il comando Start-Transaction non utilizza il parametro RollbackPreference. Di conseguenza, viene utilizzato il valore predefinito ("Error"). Quando si verifica un errore in un comando di una transazione (il percorso specificato non esiste), viene eseguito automaticamente il rollback della transazione. Nel secondo set di comandi, il comando Start-Transaction utilizza il parametro RollbackPreference con il valore "Never". Di conseguenza, quando si verifica un errore in un comando di una transazione, la transazione è ancora attiva e può essere completata correttamente. Poiché è necessario eseguire la maggior parte delle transazioni senza errore, in genere si utilizza preferibilmente il valore predefinito del parametro RollbackPreference.
Esempio 4
C:\PS>cd HKCU:\software PS HKCU:\software> start-transaction PS HKCU:\software> new-item MyCompany -UseTransaction PS HKCU:\software> start-transaction PS HKCU:\software> get-transaction PS HKCU:\software> new-item MyCompany2 -UseTransaction PS HKCU:\software> complete-transaction PS HKCU:\software> complete-transaction PS HKCU:\Software> Get-Transaction RollbackPreference SubscriberCount Status ------------------ --------------- ------ Error 2 Active Descrizione ----------- In questo esempio viene illustrato l'effetto dell'utilizzo del comando Start-Transaction mentre è in corso una transazione. L'effetto è analogo all'unione della transazione in corso. Sebbene si tratti di un comando semplificato, in genere questo scenario si verifica quando la transazione riguarda 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 una transazione con un conteggio dei sottoscrittori pari a 2. Il secondo comando New-Item fa parte della stessa transazione. Non viene apportata alcuna modifica al Registro di sistema finché non viene completata l'intera transazione. Per completare la transazione, è necessario immettere due comandi Complete-Transaction, uno per ciascun sottoscrittore. Se si eseguisse il rollback della transazione in qualsiasi punto, verrebbe eseguito il rollback dell'intera transazione per entrambi i sottoscrittori.
Esempio 5
C:\PS>cd HKCU:\software PS HKCU:\software> start-transaction PS HKCU:\software> new-item MyCompany -UseTransaction PS HKCU:\software> start-transaction -independent PS HKCU:\software> get-transaction PS HKCU:\software> undo-transaction PS HKCU:\software> new-itemproperty -path MyCompany -name MyKey -value 123 -UseTransaction PS HKCU:\software> complete-transaction PS HKCU:\software> dir my* PS HKCU:\Software> get-transaction RollbackPreference SubscriberCount Status ------------------ --------------- ------ Error 1 Active PS HKCU:\software> undo-transaction PS HKCU:\software> new-itemproperty -path MyCompany -name MyKey -value 123 -UseTransaction MyKey ----- 123 PS HKCU:\software> complete-transaction PS HKCU:\software> dir my* Hive: HKEY_CURRENT_USER\Software SKC VC Name Property --- -- ---- -------- 0 1 MyCompany {MyKey} Descrizione ----------- In questo esempio viene illustrato l'effetto dell'utilizzo del parametro Independent di Start-Transaction per avviare una transazione mentre ne è in corso un'altra. In questo caso, il rollback della nuova transazione viene eseguito senza effetti sulla transazione originale. Sebbene le transazioni siano logicamente indipendenti, è necessario eseguire il rollback o il commit della transazione più recente prima di riprendere l'utilizzo della transazione originale, poiché può essere attiva una sola transazione alla volta. 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 che segue illustra l'oggetto transazione per la transazione attiva (la più recente). Il conteggio dei sottoscrittori è uguale a 1, il che dimostra che le transazioni non sono correlate. Quando viene eseguito il rollback della transazione attiva tramite un comando Undo-Transaction, la transazione originale diventa nuovamente attiva. Il comando New-ItemProperty, che fa parte della transazione originale, viene completato correttamente ed è possibile completare la transazione originale tramite il comando Complete-Transaction. Di conseguenza, viene modificato il Registro di sistema.
Esempio 6
C:\PS>cd hkcu:\software PS HKCU:\software> start-transaction PS HKCU:\software> new-item MyCompany1 -UseTransaction PS HKCU:\software> new-item MyCompany2 PS HKCU:\software> new-item MyCompany3 -UseTransaction PS HKCU:\software> dir my* PS HKCU:\software> complete-transaction PS HKCU:\software> dir my* PS HKCU:\Software> dir my* Hive: HKEY_CURRENT_USER\Software SKC VC Name Property --- -- ---- -------- 0 0 MyCompany2 {} PS HKCU:\Software> complete-transaction PS HKCU:\Software> dir my* Hive: HKEY_CURRENT_USER\Software SKC VC Name Property --- -- ---- -------- 0 0 MyCompany1 {} 0 0 MyCompany2 {} 0 0 MyCompany3 {} Descrizione ----------- In questo esempio viene illustrato che i comandi inviati mentre è in corso una transazione possono essere inclusi o meno nella transazione. Solo i comandi che utilizzano 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. Con il primo comando "dir" viene illustrato l'effetto. Il secondo comando New-Item è stato completato immediatamente, ma il primo e il terzo comando New-Item non diventano effettivi finché non viene eseguito il commit della transazione. Il comando Complete-Transaction esegue il commit della transazione. Di conseguenza, con il secondo comando "dir" viene illustrato che tutti i nuovi elementi vengono aggiunti al Registro di sistema.
Esempio 7
C:\PS>start-transaction -timeout 2 # Wait two minutes... C:\PS> get-transaction C:\PS> new-item HKCU:\Software\MyCompany -UseTransaction C:\PS> start-transaction -timeout 2 # Wait two minutes... C:\PS>> get-transaction RollbackPreference SubscriberCount Status ------------------ --------------- ----------- Error 1 RolledBack C:\PS> new-item HKCU:\Software\MyCompany -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 Descrizione ----------- Questo comando utilizza il parametro Timeout di Start-Transaction per avviare una transazione che deve essere completata in due minuti. Se la transazione non è completa allo scadere del timeout, viene automaticamente eseguito il rollback. Allo scadere del timeout, non si riceve una notifica, ma la proprietà Status dell'oggetto transazione viene impostata su RolledBack e i comandi che utilizzano il parametro UseTransaction hanno esito negativo.
Vedere anche