Freigeben über


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.