Complete-Transaction
Führt einen Commit für die aktive Transaktion durch.
Syntax
Complete-Transaction
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Beschreibung
Das cmdlet Complete-Transaction
commits an active transaction. Wenn Sie eine Transaktion übernehmen, werden die Befehle in der Transaktion abgeschlossen, und die von den Befehlen betroffenen Daten werden geändert.
Wenn die Transaktion mehrere Abonnenten enthält, müssen Sie einen Complete-Transaction
Befehl für jeden Start-Transaction
Befehl eingeben.
Das cmdlet Complete-Transaction
ist einer der Cmdlets, die das Transaktionsfeature in Windows PowerShell unterstützen.
Weitere Informationen finden Sie unter about_Transactions.
Beispiele
Beispiel 1: Commit einer Transaktion
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 {}
In diesem Beispiel wird gezeigt, was passiert, wenn Sie das Cmdlet Complete-Transaction
verwenden, um eine Transaktion zu übernehmen.
Der Befehl Start-Transaction
startet die Transaktion. Der Befehl New-Item verwendet den parameter UseTransaction, um den Befehl in die Transaktion einzuschließen.
Der erste befehl Get-ChildItem
zeigt, dass das neue Element noch nicht zur Registrierung hinzugefügt wurde.
Der befehl Complete-Transaction
commits the transaction, which makes the registry change effective. Daher zeigt der zweite Get-ChildItem
Befehl an, dass die Registrierung geändert wird.
Beispiel 2: Commit einer Transaktion mit mehr als einem Abonnenten
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 diesem Beispiel wird gezeigt, wie Sie Complete-Transaction
verwenden, um eine Transaktion mit mehreren Abonnenten zu übernehmen.
Um eine Transaktion mit mehreren Abonnenten zu übernehmen, müssen Sie für jeden Complete-Transaction
Befehl einen Start-Transaction
Befehl eingeben. Die Daten werden nur geändert, wenn der letzte Complete-Transaction
Befehl übermittelt wird.
Zu Demonstrationszwecken zeigt dieses Beispiel eine Reihe von Befehlen, die an der Befehlszeile eingegeben wurden. In der Praxis werden Transaktionen wahrscheinlich in Skripts ausgeführt, wobei die sekundäre Transaktion von einer Funktion oder einem Hilfsskript ausgeführt wird, das vom Hauptskript aufgerufen wird.
In diesem Beispiel startet ein Start-Transaction
Befehl die Transaktion. Ein New-Item
Befehl mit dem parameter UseTransaction fügt dem Softwareschlüssel den Schlüssel "MyCompany" hinzu. Obwohl das Cmdlet New-Item
ein Schlüsselobjekt zurückgibt, werden die Daten in der Registrierung noch nicht geändert.
Ein zweiter Start-Transaction
Befehl fügt der vorhandenen Transaktion einen zweiten Abonnent hinzu. Das Cmdlet Get-Transaction
bestätigt, dass die Anzahl der Abonnenten 2 ist. Ein New-ItemProperty-Befehl mit dem parameter UseTransaction fügt dem neuen MyCompany-Schlüssel einen Registrierungseintrag hinzu. Auch hier gibt der Befehl einen Wert zurück, aber die Registrierung wird nicht geändert.
Der erste Complete-Transaction
Befehl reduziert die Anzahl der Abonnenten um 1. Dies wird durch einen Get-Transaction
Befehl bestätigt. Es werden jedoch keine Daten geändert, wie durch einen Get-ChildItem m*
-Befehl belegt.
Der zweite Complete-Transaction
Befehl führt einen Commit für die gesamte Transaktion durch und ändert die Daten in der Registrierung. Dies wird durch einen zweiten Get-ChildItem m*
Befehl bestätigt, der die Änderungen anzeigt.
Beispiel 3: Durchführen einer Transaktion, die keine Daten ändert
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
Dieses Beispiel zeigt den Wert der Verwendung von Get-*-Befehlen und anderen Befehlen, die keine Daten ändern, in einer Transaktion. Wenn ein Get-\*
-Befehl in einer Transaktion verwendet wird, ruft er die Objekte ab, die Teil der Transaktion sind. Auf diese Weise können Sie eine Vorschau der Änderungen in der Transaktion anzeigen, bevor die Änderungen zugesichert werden.
In diesem Beispiel wird eine Transaktion gestartet. Ein New-Item-Befehl mit dem parameter UseTransaction fügt der Registrierung als Teil der Transaktion einen neuen Schlüssel hinzu.
Da der neue Registrierungsschlüssel erst zur Registrierung hinzugefügt wird, wenn der Befehl Complete-Transaction
ausgeführt wird, zeigt ein einfacher Get-ChildItem
Befehl die Registrierung ohne den neuen Schlüssel an.
Wenn Sie den parameter UseTransaction dem Befehl Get-ChildItem
hinzufügen, wird der Befehl jedoch Teil der Transaktion und ruft die Elemente in der Transaktion ab, auch wenn sie noch nicht zu den Daten hinzugefügt wurden.
Parameter
-Confirm
Fordert Sie vor dem Ausführen des Cmdlets zur Bestätigung auf.
Typ: | SwitchParameter |
Aliase: | cf |
Position: | Named |
Standardwert: | False |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-WhatIf
Zeigt, was passiert, wenn das Cmdlet ausgeführt wird. Das Cmdlet wird nicht ausgeführt.
Typ: | SwitchParameter |
Aliase: | wi |
Position: | Named |
Standardwert: | False |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
Eingaben
None
Objekte können nicht an dieses Cmdlet weitergeleitet werden.
Ausgaben
None
Dieses Cmdlet generiert keine Ausgabe.
Hinweise
Sie können kein Rollback für eine Transaktion ausführen, die zugesichert wurde, oder ein Commit für eine Transaktion ausführen, die zurückgesetzt wurde.
Sie können keine andere Transaktion als die aktive Transaktion zurücksetzen. Um eine andere Transaktion zurückzuweisen, müssen Sie zuerst einen Commit ausführen oder einen Rollback für die aktive Transaktion ausführen.
Wenn ein Teil einer Transaktion nicht zugesichert werden kann, z. B. wenn ein Befehl in der Transaktion zu einem Fehler führt, wird die gesamte Transaktion zurückgesetzt.