Complete-Transaction
Esegue il commit della transazione attiva.
Sintassi
Default (Impostazione predefinita)
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 nella transazione vengono finalizzati 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 fa parte di un set di cmdlet che supportano la funzionalità delle transazioni in Windows PowerShell. Per ulteriori 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 utilizza 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 è stato ancora aggiunto al registro.
Il comando Complete-Transaction esegue il commit della transazione, rendendo effettiva la modifica del Registro di sistema. Di conseguenza, il secondo comando dir mostra che il registro è stato 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 utilizzare Complete-Transaction per eseguire il commit di una transazione con più di un sottoscrittore.
Per eseguire il commit di una transazione con più sottoscrittori, è necessario immettere un comando Complete-Transaction per ogni comando Start-Transaction . I dati vengono modificati solo quando viene inviato il comando finale Complete-Transaction .
A scopo dimostrativo, questo esempio mostra una serie di comandi immessi nella riga di comando. In pratica, è probabile che le transazioni vengano eseguite negli script, con la transazione secondaria eseguita da una funzione o uno script helper 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 nel Registro di sistema non sono ancora stati modificati.
Un secondo comando Start-Transaction aggiunge un secondo sottoscrittore alla transazione esistente. Il cmdlet Get-Transaction 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 in questo caso, il comando restituisce un valore, ma il Registro di sistema non viene modificato.
Il primo comando Complete-Transaction riduce il numero di sottoscrittori di 1. Ciò è 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. Ciò è confermato da un secondo comando dir m*, 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
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 comando Get-* viene utilizzato in una transazione, ottiene gli oggetti che fanno parte della transazione. In questo modo è possibile visualizzare in anteprima le modifiche nella transazione prima del commit delle modifiche.
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 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 nella transazione anche se non sono ancora stati aggiunti ai dati.
Parametri
-Confirm
Richiede conferma prima di eseguire il cmdlet.
Proprietà dei parametri
| Tipo: | SwitchParameter |
| Valore predefinito: | False |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
| Alias: | cfr |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
-WhatIf
Mostra gli effetti dell'esecuzione del cmdlet. Il cmdlet non viene eseguito.
Proprietà dei parametri
| Tipo: | SwitchParameter |
| Valore predefinito: | False |
| Supporta i caratteri jolly: | False |
| DontShow: | False |
| Alias: | Wi |
Set di parametri
(All)
| Posizione: | Named |
| Obbligatorio: | False |
| Valore dalla pipeline: | False |
| Valore dalla pipeline in base al nome della proprietà: | False |
| Valore dagli argomenti rimanenti: | False |
CommonParameters
Questo cmdlet supporta i parametri comuni: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Per altre informazioni, vedi about_CommonParameters.
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 alcuna transazione diversa dalla transazione attiva. Per eseguire il rollback di una transazione diversa, è necessario 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.