Condividi tramite


Complete-Transaction

Esegue il commit della transazione attiva.

Sintassi

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

Descrizione

Il cmdlet Complete-Transaction esegue il commit di una transazione attiva. Quando si esegue il commit di una transazione, i comandi della transazione vengono completati e i dati interessati dai comandi vengono modificati.

Se la transazione include più sottoscrittori, per eseguire il commit della transazione, è necessario immettere un comando Complete-Transaction per ogni comando Start-Transaction.

Il cmdlet Complete-Transaction è uno dei cmdlet che supportano la funzionalità delle transazioni in Windows PowerShell. Per altre informazioni, vedere about_Transactions.

Esempio

Esempio 1: Eseguire il commit di una transazione

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

In questo esempio viene illustrato cosa accade quando si usa il cmdlet Complete-Transaction per eseguire il commit di una transazione.

Il comando Start-Transaction avvia la transazione. Il comando New-Item usa il parametro UseTransaction per includere il comando nella transazione.

Il primo comando dir (Get-ChildItem) mostra che il nuovo elemento non è ancora stato aggiunto al Registro di sistema.

Il comando Complete-Transaction esegue il commit della transazione, che rende effettiva la modifica del Registro di sistema. Di conseguenza, il secondo comando dir mostra che il Registro di sistema viene modificato.

Esempio 2: Eseguire il commit di una transazione con più sottoscrittori

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}

In questo esempio viene illustrato come usare Complete-Transaction per eseguire il commit di una transazione con più sottoscrittori.

Per eseguire il commit di una transazione multi-sottoscrittore, è necessario immettere un comando Complete-Transaction per ogni comando Start-Transaction . I dati vengono modificati solo quando viene inviato il comando Complete-Transaction finale.

A scopo dimostrativo, questo esempio mostra una serie di comandi immessi dalla riga di comando. In pratica, le transazioni vengono verosimilmente eseguite in script, con la transazione secondaria eseguita da uno script di funzione o di supporto chiamato dallo script principale.

In questo esempio un comando Start-Transaction avvia la transazione. Un comando New-Item con il parametro UseTransaction aggiunge la chiave MyCompany alla chiave Software. Anche se il cmdlet New-Item restituisce un oggetto chiave, i dati del Registro di sistema non vengono ancora modificati.

Un secondo comando Start-Transaction aggiunge un secondo sottoscrittore alla transazione esistente. Il cmdlet Get-Transaction conferma che il conteggio dei sottoscrittori è 2. Un comando New-ItemProperty con il parametro UseTransaction aggiunge una voce del Registro di sistema alla nuova chiave MyCompany. Anche questa volta il comando restituisce un valore, ma il Registro di sistema non viene modificato.

Il primo comando Complete-Transaction riduce il conteggio dei sottoscrittori per 1. Viene confermato da un comando Get-Transaction . Tuttavia, nessun dato viene modificato, come evidenziato da un comando dir m* (Get-ChildItem).

Il secondo comando Complete-Transaction esegue il commit dell'intera transazione e modifica i dati nel Registro di sistema. Viene confermato da un secondo comando m* dir, che mostra le modifiche.

Esempio 3: Eseguire una transazione che non modifica i dati

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

Questo esempio illustra il valore dell'utilizzo dei comandi Get-* e di altri comandi che non modificano i dati in una transazione. Quando usato in una transazione, il comando Get-* ottiene gli oggetti che fanno parte della transazione. In questo modo è possibile visualizzare in anteprima le modifiche apportate alla transazione prima del commit.

In questo esempio viene avviata una transazione. Un comando New-Item con il parametro UseTransaction aggiunge una nuova chiave al Registro di sistema come parte della transazione.

Poiché la nuova chiave del Registro di sistema non viene aggiunta al Registro di sistema finché non viene eseguito il comando Complete-Transaction , un semplice comando dir (Get-ChildItem) mostra il Registro di sistema senza la nuova chiave.

Tuttavia, quando si aggiunge il parametro UseTransaction al comando dir, il comando diventa parte della transazione e ottiene gli elementi della transazione anche se non vengono ancora aggiunti ai dati.

Parametri

-Confirm

Richiede la conferma dell'utente prima di eseguire il cmdlet.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

Mostra l'esito in caso di esecuzione del cmdlet. Il cmdlet non viene eseguito.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Input

None

Non è possibile inviare tramite pipe oggetti a questo cmdlet.

Output

None

Questo cmdlet non genera alcun output.

Note

  • Non è possibile eseguire il rollback di una transazione di cui è stato eseguito il commit o eseguire il commit di una transazione di cui è stato eseguito il rollback.

    Non è possibile eseguire il rollback di transazioni diverse da quella attiva. Per eseguire il rollback di una transazione diversa, occorre prima eseguire il commit o il rollback della transazione attiva.

    Per impostazione predefinita, se non è possibile eseguire il commit di una parte di una transazione, ad esempio quando un comando nella transazione genera un errore, viene eseguito il rollback dell'intera transazione.