Complete-Transaction
Führt einen Commit für die aktive Transaktion aus.
Syntax
Complete-Transaction
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Beschreibung
Das Complete-Transaction
Cmdlet führt einen Commit für eine aktive Transaktion durch. Wenn Sie für eine Transaktion einen Commit ausführen, 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 Befehl für jeden Start-Transaction
Befehl eingebenComplete-Transaction
, um die Transaktion zu übernehmen.
Das Complete-Transaction
Cmdlet 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 Complete-Transaction
Cmdlet zum Commit einer Transaktion verwenden.
Der Start-Transaction
Befehl startet die Transaktion. Der Befehl "New-Item" verwendet den UseTransaction-Parameter , um den Befehl in die Transaktion einzuschließen.
Der erste Get-ChildItem
Befehl zeigt, dass das neue Element noch nicht zur Registrierung hinzugefügt wurde.
Der Complete-Transaction
Befehl führt einen Commit für die Transaktion durch, wodurch die Registrierungsänderung wirksam wird. 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 Complete-Transaction
Sie eine Transaktion mit mehreren Abonnenten ausführen.
Um eine Transaktion mit mehreren Abonnenten zu übernehmen, müssen Sie für jeden Start-Transaction
Befehl einen Complete-Transaction
Befehl eingeben. Die Daten werden nur geändert, wenn der endgültige Complete-Transaction
Befehl übermittelt wird.
Für Demonstrationszwecke werden in diesem Beispiel eine Reihe von Befehlen in der Befehlszeile eingegeben. In der Praxis werden Transaktionen häufig 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 New-Item
Cmdlet ein Schlüsselobjekt zurückgibt, werden die Daten in der Registrierung noch nicht geändert.
Ein zweiter Befehl fügt der vorhandenen Transaktion einen zweiten Start-Transaction
Abonnenten hinzu. Das Get-Transaction
Cmdlet bestätigt, dass die Anzahl der Abonnenten 2 ist. Ein Befehl "New-ItemProperty" mit dem Parameter "UseTransaction " fügt dem neuen MyCompany-Schlüssel einen Registrierungseintrag hinzu. Auch hier gibt der Befehl einen Wert zurück, die Registrierung wird jedoch 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. So können Sie die Änderungen in der Transaktion in der Vorschau anzeigen, bevor ein Commit für die Änderungen ausgeführt wird.
In diesem Beispiel wird eine Transaktion gestartet. Ein Befehl "New-Item" 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 Complete-Transaction
Befehl ausgeführt wird, zeigt ein einfacher Get-ChildItem
Befehl die Registrierung ohne den neuen Schlüssel an.
Wenn Sie jedoch den UseTransaction-Parameter zum Get-ChildItem
Befehl hinzufügen, wird der Befehl Teil der Transaktion und ruft die Elemente in der Transaktion ab, auch wenn sie noch nicht zu den Daten hinzugefügt werden.
Parameter
-Confirm
Hiermit werden Sie vor der Ausführung des Cmdlets zur Bestätigung aufgefordert.
Type: | SwitchParameter |
Aliases: | cf |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-WhatIf
Zeigt, was geschieht, wenn das Cmdlet ausgeführt wird. Das Cmdlet wird nicht ausgeführt.
Type: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Eingaben
None
Objekte können nicht an dieses Cmdlet weitergereicht werden.
Ausgaben
None
Dieses Cmdlet generiert keine Ausgabe.
Hinweise
Sie können keine Transaktion zurücksetzen, für die ein Commit ausgeführt wurde, oder einen Commit für eine Transaktion ausführen, die zurückgesetzt wurde.
Sie können keine andere Transaktion als die aktive Transaktion zurücksetzen. Zum Zurücksetzen einer anderen Transaktion müssen Sie zuerst einen Commit für die aktive Transaktion ausführen oder diese zurücksetzen.
Wenn für einen Teil einer Transaktion kein Commit ausgeführt werden kann, z. B. wenn ein Befehl in der Transaktion zu einem Fehler führt, wird standardmäßig die gesamte Transaktion zurückgesetzt.
Ähnliche Themen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für