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




Argomenti della Guida