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.
Tipo: | SwitchParameter |
Alias: | cf |
Posizione: | Named |
Valore predefinito: | False |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-WhatIf
Mostra gli effetti dell'esecuzione del cmdlet. Il cmdlet non viene eseguito.
Tipo: | SwitchParameter |
Alias: | wi |
Posizione: | Named |
Valore predefinito: | False |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | 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.