Condividi tramite


Complete-Transaction

Esegue il commit della transazione attiva.

Sintassi

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

Descrizione

Il cmdlet esegue il Complete-Transaction 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 Complete-Transaction comando per ogni Start-Transaction comando.

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

Esempio

Esempio 1: Eseguire il commit di una transazione

Set-Location hkcu:\software
Start-Transaction
New-Item MyCompany -UseTransaction
Get-ChildItem m*

Hive: HKEY_CURRENT_USER\software

SKC  VC Name                           Property
---  -- ----                           --------
82   1 Microsoft                      {(default)}

Complete-Transaction
Get-ChildItem m*

Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
82   1 Microsoft                      {(default)}
0   0 MyCompany                      {}

Questo esempio illustra cosa accade quando si usa il cmdlet per eseguire il Complete-Transaction commit di una transazione.

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

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

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

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

Set-Location hkcu:\software
Start-Transaction
New-Item MyCompany -UseTransaction

Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
0   0 MyCompany                      {}

Start-Transaction
Get-Transaction

RollbackPreference   SubscriberCount  Status
------------------   ---------------  ------
Error                2                Active

New-ItemProperty -Path MyCompany -Name MyKey -Value -UseTransaction

MyKey
-----
123

Complete-Transaction
Get-Transaction

RollbackPreference   SubscriberCount  Status
------------------   ---------------  ------
Error                1                Active

Get-ChildItem m*

Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
82   1 Microsoft                      {(default)}

Complete-Transaction
Get-ChildItem 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 Complete-Transaction comando per ogni Start-Transaction comando. I dati vengono modificati solo quando viene inviato il comando finale Complete-Transaction .

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 Start-Transaction comando avvia la transazione. Un New-Item comando con il parametro UseTransaction aggiunge la chiave MyCompany alla chiave Software. Anche se il New-Item cmdlet restituisce un oggetto chiave, i dati nel Registro di sistema non vengono ancora modificati.

Un secondo comando aggiunge un secondo Start-Transaction sottoscrittore alla transazione esistente. Il Get-Transaction cmdlet conferma che il numero di 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 Complete-Transaction comando riduce il numero di sottoscrittori di 1. Questa operazione è confermata da un Get-Transaction comando. Tuttavia, nessun dato viene modificato, come evidenziato da un Get-ChildItem m* comando.

Il secondo Complete-Transaction comando esegue il commit dell'intera transazione e modifica i dati nel Registro di sistema. Questa operazione viene confermata da un secondo Get-ChildItem m* comando, che mostra le modifiche.

Esempio 3: Eseguire una transazione che non modifica i dati

Set-Location hkcu:\software
Start-Transaction
New-Item MyCompany -UseTransaction
Get-ChildItem m*

Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
82   1 Microsoft                      {(default)}

Get-ChildItem m* -UseTransaction

Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
82   1 Microsoft                      {(default)}
0   0 MyCompany                      {}

Complete-Transaction

In questo esempio viene illustrato il valore dell'uso dei comandi Get-* e di altri comandi che non modificano i dati in una transazione. Quando un Get-\* comando viene usato in una transazione, 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 fino a quando non viene eseguito il Complete-Transaction comando, un semplice Get-ChildItem comando mostra il Registro di sistema senza la nuova chiave.

Tuttavia, quando si aggiunge il parametro UseTransaction al Get-ChildItem comando, il comando diventa parte della transazione e ottiene gli elementi nella transazione anche se non sono ancora stati aggiunti ai dati.

Parametri

-Confirm

Richiede conferma 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 gli effetti dell'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.