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.