Freigeben über


about_Transactions

Kurze Beschreibung

Beschreibt, wie Transaktionen in PowerShell verwaltet werden.

Lange Beschreibung

Transaktionen werden in PowerShell ab PowerShell 2.0 unterstützt. Mit diesem Feature können Sie eine Transaktion starten, angeben, welche Befehle Teil der Transaktion sind, und ein Commit oder Rollback einer Transaktion ausführen.

In PowerShell ist eine Transaktion ein Satz von mindestens einem Befehl, der als logische Einheit verwaltet wird. Eine Transaktion kann abgeschlossen werden ("zugesichert"), wodurch die von der Transaktion betroffenen Daten geändert werden. Oder eine Transaktion kann vollständig rückgängig gemacht werden ("Rollback"), sodass die betroffenen Daten nicht von der Transaktion geändert werden.

Da die Befehle in einer Transaktion als Einheit verwaltet werden, werden entweder alle Befehle zugesichert, oder alle Befehle werden zurückgesetzt.

Transaktionen werden häufig in der Datenverarbeitung verwendet, vor allem bei Datenbankvorgängen und für Finanztransaktionen. Transaktionen werden am häufigsten verwendet, wenn im schlimmsten Fall für eine Reihe von Befehlen nicht alle fehlschlagen, aber dass einige Befehle erfolgreich sind, während andere fehlschlagen, das System in einem beschädigten, falschen oder uninterpretierbaren Zustand zurückgibt, der schwer zu reparieren ist.

Transaktions-Cmdlets

PowerShell enthält mehrere Cmdlets zum Verwalten von Transaktionen.

  • Start-Transaction: Startet eine neue Transaktion.
  • Use-Transaction: Fügt der Transaktion einen Befehl oder Ausdruck hinzu. Der Befehl muss transaktionsfähige Objekte verwenden.
  • Undo-Transaction: Rollback der Transaktion, sodass keine Daten von der Transaktion geändert werden.
  • Complete-Transaction: Commits der Transaktion. Die von der Transaktion betroffenen Daten werden geändert.
  • Get-Transaction: Ruft Informationen zur aktiven Transaktion ab.

Geben Sie für eine Liste der Transaktions-Cmdlets Folgendes ein:

Get-Command *transaction

Ausführliche Informationen zu den Cmdlets finden Sie unter:

Get-Help Use-Transaction -Detailed

Transaktionsfähige Elemente

Um an einer Transaktion teilzunehmen, müssen sowohl das Cmdlet als auch der Anbieter Transaktionen unterstützen. Dieses Feature ist in die Objekte integriert, die von der Transaktion betroffen sind.

Der PowerShell-Registrierungsanbieter unterstützt Transaktionen in Windows. Das TransactedString-Objekt funktioniert mit jedem Betriebssystem, das PowerShell ausführt.

Andere PowerShell-Anbieter können Transaktionen unterstützen. Um die PowerShell-Anbieter in Ihrer Sitzung zu finden, die Transaktionen unterstützen, verwenden Sie den folgenden Befehl, um den Transaktionswert in der Eigenschaft "Capabilities " von Anbietern zu finden:

Get-PSProvider | Where-Object {$_.Capabilities -like "*transactions*"}

Weitere Informationen zu einem Anbieter finden Sie in der Hilfe für den Anbieter. Geben Sie Folgendes ein, um Die Hilfe zum Anbieter zu erhalten:

Get-Help <provider-name>

Wenn Sie z. B. Hilfe zum Registrierungsanbieter abrufen möchten, geben Sie Folgendes ein:

Get-Help Registry

Der UseTransaction-Parameter

Cmdlets, die Transaktionen unterstützen können, weisen einen UseTransaction-Parameter auf . Dieser Parameter enthält den Befehl in der aktiven Transaktion. Sie können den vollständigen Parameternamen oder den Alias usetx verwenden.

Der Parameter kann nur verwendet werden, wenn die Sitzung eine aktive Transaktion enthält. Wenn Sie einen Befehl mit dem UseTransaction-Parameter eingeben, wenn keine aktive Transaktion vorhanden ist, schlägt der Befehl fehl.

Um Cmdlets mit dem Parameter UseTransaction zu finden, geben Sie Folgendes ein:

Get-Help * -Parameter UseTransaction

In PowerShell Core unterstützen alle Cmdlets, die für die Arbeit mit PowerShell-Anbietern entwickelt wurden, Transaktionen. Daher können Sie die Anbieter-Cmdlets zum Verwalten von Transaktionen verwenden.

Weitere Informationen zu PowerShell-Anbietern finden Sie unter about_Providers.

Das Transaktionsobjekt

Transaktionen werden in PowerShell durch ein Transaktionsobjekt, System.Management.Automation.Transaction, dargestellt.

Das -Objekt weist die folgenden Eigenschaften auf:

  • RollbackPreference: Enthält die Rollbackeinstellung, die für die aktuelle Transaktion festgelegt wurde. Sie können die Rollbackeinstellung festlegen, wenn Sie Start-Transaction die Transaktion starten.

    Die Rollbackeinstellung bestimmt die Bedingungen, unter denen die Transaktion automatisch zurückgesetzt wird. Gültige Werte sind Error, TerminatingError und Never. Der Standardwert ist Error.

  • Status: Enthält den aktuellen Status der Transaktion. Gültige Werte sind Active, Committed und RolledBack.

  • SubscriberCount: Enthält die Anzahl der Abonnenten der Transaktion. Ein Abonnent wird einer Transaktion hinzugefügt, wenn Sie eine Transaktion starten, während eine andere Transaktion ausgeführt wird. Die Anzahl der Abonnenten wird erhöht, wenn ein Abonnent die Transaktion commits.

Aktive Transaktionen

In PowerShell ist jeweils nur eine Transaktion aktiv, und Sie können nur die aktive Transaktion verwalten. Mehrere Transaktionen können gleichzeitig in derselben Sitzung ausgeführt werden, aber nur die zuletzt gestartete Transaktion ist aktiv.

Daher können Sie bei Verwendung der Transaktions-Cmdlets keine bestimmte Transaktion angeben. Befehle gelten immer für die aktive Transaktion.

Dies ist am deutlichsten im Verhalten des Get-Transaction Cmdlets. Wenn Sie einen Get-Transaction Befehl eingeben, Get-Transaction ruft immer nur ein Transaktionsobjekt ab. Dieses Objekt ist das Objekt, das die aktive Transaktion darstellt.

Um eine andere Transaktion zu verwalten, müssen Sie zuerst die aktive Transaktion abschließen, entweder durch Commit oder Zurücksetzen. Wenn Sie dies tun, wird die vorherige Transaktion automatisch aktiv. Transaktionen werden in umgekehrter Reihenfolge aktiv, in der sie gestartet werden, sodass die zuletzt gestartete Transaktion immer aktiv ist.

Abonnenten und unabhängige Transaktionen

Wenn Sie eine Transaktion starten, während eine andere Transaktion ausgeführt wird, startet PowerShell standardmäßig keine neue Transaktion. Stattdessen wird der aktuellen Transaktion ein "Abonnent" hinzugefügt.

Wenn eine Transaktion über mehrere Abonnenten verfügt, führt ein einzelner Undo-Transaction Befehl zu jedem Zeitpunkt einen Rollback der gesamten Transaktion für alle Abonnenten durch. Um die Transaktion zu übernehmen, müssen Sie jedoch einen Complete-Transaction Befehl für jeden Abonnenten eingeben.

Um die Anzahl der Abonnenten einer Transaktion zu finden, überprüfen Sie die SubscriberCount-Eigenschaft des Transaktionsobjekts. Der folgende Befehl verwendet beispielsweise das Get-Transaction Cmdlet, um den Wert der SubscriberCount-Eigenschaft der aktiven Transaktion abzurufen:

(Get-Transaction).SubscriberCount

Das Hinzufügen eines Abonnenten ist das Standardverhalten, da die meisten Transaktionen, die gestartet werden, während eine andere Transaktion ausgeführt wird, mit der ursprünglichen Transaktion verknüpft sind. Im typischen Modell ruft ein Skript, das eine Transaktion enthält, ein Hilfsskript auf, das seine eigene Transaktion enthält. Da die Transaktionen miteinander verbunden sind, sollten sie als Einheit zurückgesetzt oder zugesichert werden.

Sie können jedoch eine Transaktion starten, die unabhängig von der aktuellen Transaktion ist, indem Sie den Parameter Independent des Start-Transaction Cmdlets verwenden.

Wenn Sie eine unabhängige Transaktion starten, Start-Transaction wird ein neues Transaktionsobjekt erstellt, und die neue Transaktion wird zur aktiven Transaktion. Die unabhängige Transaktion kann zugesichert oder zurückgesetzt werden, ohne dass sich die ursprüngliche Transaktion auswirkt.

Wenn die unabhängige Transaktion abgeschlossen ist (zugesichert oder zurückgesetzt), wird die ursprüngliche Transaktion erneut zur aktiven Transaktion.

Ändern von Daten

Wenn Sie Transaktionen zum Ändern von Daten verwenden, werden die daten, die von der Transaktion betroffen sind, erst geändert, wenn Sie die Transaktion übernehmen. Die gleichen Daten können jedoch durch Befehle geändert werden, die nicht Teil der Transaktion sind.

Beachten Sie dies, wenn Sie Transaktionen zum Verwalten freigegebener Daten verwenden. Datenbanken verfügen in der Regel über Mechanismen, mit denen die Daten gesperrt werden, während Sie daran arbeiten, und verhindern, dass andere Benutzer und andere Befehle, Skripts und Funktionen sie ändern.

Die Sperre ist jedoch ein Feature der Datenbank. Sie bezieht sich nicht auf Transaktionen. Wenn Sie in einem transaktionsfähigen Dateisystem oder einem anderen Datenspeicher arbeiten, können die Daten geändert werden, während die Transaktion ausgeführt wird.

Beispiele

Die Beispiele in diesem Abschnitt verwenden den PowerShell-Registrierungsanbieter und gehen davon aus, dass Sie damit vertraut sind. Geben Sie informationen zum Registrierungsanbieter ein Get-Help Registry.

Beispiel 1: Commit für eine Transaktion

Verwenden Sie das Start-Transaction Cmdlet, um eine Transaktion zu erstellen. Der folgende Befehl startet eine Transaktion mit den Standardeinstellungen.

Start-Transaction

Verwenden Sie den UseTransaction-Parameter des Cmdlets, um Befehle in die Transaktion einzuschließen. Standardmäßig sind Befehle nicht in der Transaktion enthalten,

Beispielsweise ist der folgende Befehl, der die aktuelle Position im Softwareschlüssel des HKCU: Laufwerks festlegt, nicht in der Transaktion enthalten.

cd HKCU:\Software

Der folgende Befehl, der den MyCompany-Schlüssel erstellt, verwendet den UseTransaction-Parameter des New-Item Cmdlets, um den Befehl in die aktive Transaktion einzuschließen.

New-Item MyCompany -UseTransaction

Der Befehl gibt ein Objekt zurück, das den neuen Schlüssel darstellt, aber da der Befehl Teil der Transaktion ist, wird die Registrierung noch nicht geändert.

Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
  0   0 MyCompany                      {}

Verwenden Sie das Complete-Transaction Cmdlet, um die Transaktion zu übernehmen. Da sie sich immer auf die aktive Transaktion auswirkt, können Sie die Transaktion nicht angeben.

Complete-Transaction

Daher wird der MyCompany Schlüssel der Registrierung hinzugefügt.

dir m*
Hive: HKEY_CURRENT_USER\software

SKC  VC Name                           Property
---  -- ----                           --------
 83   1 Microsoft                      {(default)}
  0   0 MyCompany                      {}

Beispiel 2: Zurücksetzen einer Transaktion

Verwenden Sie das Start-Transaction Cmdlet, um eine Transaktion zu erstellen. Der folgende Befehl startet eine Transaktion mit den Standardeinstellungen.

Start-Transaction

Der folgende Befehl, der den Schlüssel MyOtherCompany erstellt, verwendet den UseTransaction-Parameter des New-Item Cmdlets, um den Befehl in die aktive Transaktion einzuschließen.

New-Item MyOtherCompany -UseTransaction

Der Befehl gibt ein Objekt zurück, das den neuen Schlüssel darstellt, aber da der Befehl Teil der Transaktion ist, wird die Registrierung noch nicht geändert.

Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
  0   0 MyOtherCompany                 {}

Verwenden Sie zum Zurücksetzen der Transaktion das Undo-Transaction Cmdlet. Da sie sich immer auf die aktive Transaktion auswirkt, geben Sie die Transaktion nicht an.

Undo-Transaction

Das Ergebnis ist, dass der MyOtherCompany Schlüssel nicht zur Registrierung hinzugefügt wird.

dir m*
Hive: HKEY_CURRENT_USER\software

SKC  VC Name                           Property
---  -- ----                           --------
 83   1 Microsoft                      {(default)}
  0   0 MyCompany                      {}

Beispiel 3: Anzeigen einer Vorschau einer Transaktion

In der Regel werden die befehle, die in einer Transaktionsänderungsdaten verwendet werden. Die Befehle zum Abrufen von Daten sind jedoch auch in einer Transaktion nützlich, da sie Daten innerhalb der Transaktion abrufen. Dies bietet eine Vorschau der Änderungen, die das Commit der Transaktion verursachen würde.

Das folgende Beispiel zeigt, wie Sie den Get-ChildItem Befehl (der Alias ist dir) verwenden, um eine Vorschau der Änderungen in einer Transaktion anzuzeigen.

Der folgende Befehl startet eine Transaktion.

Start-Transaction

Der folgende Befehl verwendet das New-ItemProperty Cmdlet, um den MyKey Registrierungseintrag zum Schlüssel "MyCompany" hinzuzufügen. Der Befehl verwendet den UseTransaction-Parameter, um den Befehl in die Transaktion einzuschließen.

New-ItemProperty -Path MyCompany -Name MyKey -Value 123 -UseTransaction

Der Befehl gibt ein Objekt zurück, das den neuen Registrierungseintrag darstellt, aber der Registrierungseintrag wird nicht geändert.

MyKey
-----
123

Um die Elemente abzurufen, die sich derzeit in der Registrierung befinden, verwenden Sie einen Get-ChildItem Befehl (dir) ohne den UseTransaction-Parameter. Der folgende Befehl ruft Elemente ab, die mit "M" beginnen.

dir m*

Das Ergebnis zeigt, dass dem MyCompany Schlüssel noch keine Einträge hinzugefügt wurden.

Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
 83   1 Microsoft                      {(default)}
  0   0 MyCompany                      {}

Um eine Vorschau des Commits der Transaktion anzuzeigen, geben Sie einen Get-ChildItem (dir) Befehl mit dem Parameter UseTransaction ein. Dieser Befehl enthält eine Ansicht der Daten aus der Transaktion.

dir m* -UseTransaction

Das Ergebnis zeigt, dass, wenn die Transaktion zugesichert wird, der MyKey Eintrag dem MyCompany Schlüssel hinzugefügt wird.

Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
 83   1 Microsoft                      {(default)}
  0   1 MyCompany                      {MyKey}

Beispiel 4: Kombinieren von Transaktionen und nicht durchgeführten Befehlen

Sie können während einer Transaktion Nicht-Transaktionen-Befehle eingeben. Die Nicht-Transaktionen-Befehle wirken sich sofort auf die Daten aus, wirken sich jedoch nicht auf die Transaktion aus. Der folgende Befehl startet eine Transaktion im HKCU:\Software Registrierungsschlüssel.

Start-Transaction

Die nächsten drei Befehle verwenden das New-Item Cmdlet, um der Registrierung Schlüssel hinzuzufügen. Die ersten und dritten Befehle verwenden den UseTransaction-Parameter, um die Befehle in die Transaktion einzuschließen. Mit dem zweiten Befehl wird der Parameter weggelassen. Da der zweite Befehl nicht in der Transaktion enthalten ist, ist er sofort wirksam.

New-Item MyCompany1 -UseTransaction
New-Item MyCompany2
New-Item MyCompany3 -UseTransaction

Um den aktuellen Status der Registrierung anzuzeigen, verwenden Sie einen Get-ChildItem (dir) Befehl ohne den UseTransaction-Parameter. Dieser Befehl ruft Elemente ab, die mit M.

dir m*

Das Ergebnis zeigt, dass der MyCompany2 Schlüssel zur Registrierung hinzugefügt wird, aber die MyCompany1 Schlüssel, MyCompany3 die Teil der Transaktion sind, werden nicht hinzugefügt.

Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
 83   1 Microsoft                      {(default)}
  0    0 MyCompany2                     {}

Der folgende Befehl führt einen Commit für die Transaktion durch.

Complete-Transaction

Nun werden die Schlüssel, die als Teil der Transaktion hinzugefügt wurden, in der Registrierung angezeigt.

dir m*
Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
83   1 Microsoft                      {(default)}
0    0 MyCompany1                     {}
0    0 MyCompany2                     {}
0    0 MyCompany3                     {}

Beispiel 5: Verwenden des automatischen Rollbacks

Wenn ein Befehl in einer Transaktion einen Fehler jeglicher Art generiert, wird die Transaktion automatisch zurückgesetzt.

Dieses Standardverhalten wurde für Skripts entwickelt, die Transaktionen ausführen. Skripts sind in der Regel gut getestet und enthalten Fehlerbehandlungslogik, sodass Fehler nicht erwartet werden und die Transaktion beendet werden sollen.

Der erste Befehl startet eine Transaktion im HKCU:\Software Registrierungsschlüssel.

Start-Transaction

Der folgende Befehl verwendet das New-Item Cmdlet, um den MyCompany Schlüssel zur Registrierung hinzuzufügen. Der Befehl verwendet den UseTransaction-Parameter (der Alias ist usetx), um den Befehl in die Transaktion einzuschließen.

New-Item MyCompany -usetx

Da der MyCompany Schlüssel bereits in der Registrierung vorhanden ist, schlägt der Befehl fehl, und die Transaktion wird zurückgesetzt.

New-Item : A key at this path already exists
At line:1 char:9
+ New-Item <<<<  MyCompany -usetx

Ein Get-Transaction Befehl bestätigt, dass die Transaktion zurückgesetzt wurde und dass "SubscriberCount" 0 ist.

RollbackPreference   SubscriberCount   Status
------------------   ---------------   ------
Error                0                 RolledBack

Beispiel 6: Ändern der Rollbackeinstellung

Wenn die Transaktion fehlertoleranter sein soll, können Sie den RollbackPreference-ParameterStart-Transaction verwenden, um die Einstellung zu ändern.

Der folgende Befehl startet eine Transaktion mit einer Rollbackeinstellung von Never.

Start-Transaction -RollbackPreference Never

Wenn der Befehl fehlschlägt, wird die Transaktion in diesem Fall nicht automatisch zurückgesetzt.

New-Item MyCompany -usetx
New-Item : A key at this path already exists
At line:1 char:9
+ New-Item <<<<  MyCompany -usetx

Da die Transaktion noch aktiv ist, können Sie den Befehl als Teil der Transaktion erneut übermitteln.

New-Item MyOtherCompany -usetx

Beispiel 7: Verwenden des Cmdlets Use-Transaction

Mit dem Use-Transaction Cmdlet können Sie direkte Skripts für transaktionsfähige Microsoft .NET Framework-Objekte ausführen. Use-Transaction verwendet einen Skriptblock, der nur Befehle und Ausdrücke enthalten kann, die transaktionsfähige .NET Framework-Objekte verwenden, z. B. Instanzen der Microsoft.PowerShell.Commands.Management.TransactedString-Klasse .

Der folgende Befehl startet eine Transaktion.

Start-Transaction

Der folgende New-Object Befehl erstellt eine Instanz der TransactedString-Klasse und speichert sie in der $t Variablen.

$t = New-Object Microsoft.PowerShell.Commands.Management.TransactedString

Der folgende Befehl verwendet die Append-Methode des TransactedString-Objekts , um der Zeichenfolge Text hinzuzufügen. Da der Befehl nicht Teil der Transaktion ist, ist die Änderung sofort wirksam.

$t.Append("Windows")

Der folgende Befehl verwendet dieselbe Append-Methode, um Text hinzuzufügen, fügt aber den Text als Teil der Transaktion hinzu. Der Befehl ist in geschweifte Klammern eingeschlossen und wird als Wert des ScriptBlock-Parameters festgelegt Use-Transaction. Der UseTransaction-Parameter (usetx) ist erforderlich.

Use-Transaction {$t.Append(" PowerShell")} -usetx

Verwenden Sie die $t Methode des ToString anzuzeigen.

$t.ToString()

Die Ausgabe zeigt, dass nur die nicht durchgeführten Änderungen wirksam sind.

Windows

Um den aktuellen Inhalt der transaktionenten Zeichenfolge in $t aus der Transaktion anzuzeigen, betten Sie den Ausdruck in einen Use-Transaction Befehl ein.

Use-Transaction {$t.ToString()} -usetx

Die Ausgabe zeigt die Transaktionsansicht an.

PowerShell

Der folgende Befehl führt einen Commit für die Transaktion durch.

Complete-Transaction

So zeigen Sie die endgültige Zeichenfolge an:

$t.ToString()
PowerShell

Beispiel 8: Verwalten von Transaktionen mit mehreren Abonnenten

Wenn Sie eine Transaktion starten, während eine andere Transaktion ausgeführt wird, erstellt PowerShell standardmäßig keine zweite Transaktion. Stattdessen wird der aktuellen Transaktion ein Abonnent hinzugefügt.

In diesem Beispiel wird gezeigt, wie Sie eine Transaktion mit mehreren Abonnenten anzeigen und verwalten.

Beginnen Sie mit dem Starten einer Transaktion im HKCU:\Software Schlüssel.

Start-Transaction

Der folgende Befehl verwendet den Get-Transaction Befehl zum Abrufen der aktiven Transaktion.

Get-Transaction

Das Ergebnis zeigt das Objekt, das die aktive Transaktion darstellt.

RollbackPreference   SubscriberCount   Status
------------------   ---------------   ------
Error                1                 Active

Mit dem folgenden Befehl wird der Registrierung der Schlüssel "MyCompany" hinzugefügt. Der Befehl verwendet den UseTransaction-Parameter, um den Befehl in die Transaktion einzuschließen.

New-Item MyCompany -UseTransaction

Der folgende Befehl verwendet den Start-Transaction Befehl, um eine Transaktion zu starten. Obwohl dieser Befehl an der Eingabeaufforderung eingegeben wird, ist dieses Szenario wahrscheinlicher, wenn Sie ein Skript ausführen, das eine Transaktion enthält.

Start-Transaction

Ein Get-Transaction Befehl zeigt an, dass die Anzahl der Abonnenten für das Transaktionsobjekt erhöht wird. Der Wert ist jetzt 2.

RollbackPreference   SubscriberCount   Status
------------------   ---------------   ------
Error                2                 Active

Der nächste Befehl verwendet das New-ItemProperty Cmdlet, um den Registrierungseintrag "MyKey" zum Schlüssel "MyCompany" hinzuzufügen. Er verwendet den UseTransaction-Parameter, um den Befehl in die Transaktion einzuschließen.

New-ItemProperty -Path MyCompany -Name MyKey -UseTransaction

Der Schlüssel "MyCompany" ist in der Registrierung nicht vorhanden, dieser Befehl ist jedoch erfolgreich, da die beiden Befehle Teil derselben Transaktion sind.

Der folgende Befehl führt einen Commit für die Transaktion durch. Wenn die Transaktion zurückgesetzt wurde, würde die Transaktion für alle Abonnenten zurückgesetzt.

Complete-Transaction

Ein Get-Transaction Befehl zeigt an, dass die Abonnentenanzahl des Transaktionsobjekts 1 ist, aber der Wert von Status ist noch aktiv (nicht zugesichert).

RollbackPreference   SubscriberCount   Status
------------------   ---------------   ------
Error                1                 Active

Um das Commit für die Transaktion abzuschließen, geben Sie einen zweiten Vollständigen Transaktionsbefehl ein. Um eine Transaktion mit mehreren Abonnenten zu übernehmen, müssen Sie für jeden Complete-Transaction Befehl einen Start-Transaction Befehl eingeben.

Complete-Transaction

Ein weiterer Get-Transaction Befehl zeigt, dass die Transaktion zugesichert wurde.

RollbackPreference   SubscriberCount   Status
------------------   ---------------   ------
Error                0                 Committed

Beispiel 9: Verwalten unabhängiger Transaktionen

Wenn Sie eine Transaktion starten, während eine andere Transaktion ausgeführt wird, können Sie den Unabhängigen Parameter Start-Transaction verwenden, um die neue Transaktion unabhängig von der ursprünglichen Transaktion zu machen.

Wenn Sie dies tun, Start-Transaction wird ein neues Transaktionsobjekt erstellt und die neue Transaktion zur aktiven Transaktion.

Beginnen Sie mit dem Starten einer Transaktion im HKCU:\Software Schlüssel.

Start-Transaction

Der folgende Befehl verwendet den Get-Transaction Befehl zum Abrufen der aktiven Transaktion.

Get-Transaction

Das Ergebnis zeigt das Objekt, das die aktive Transaktion darstellt.

RollbackPreference   SubscriberCount   Status
------------------   ---------------   ------
Error                1                 Active

Mit dem folgenden Befehl wird der Registrierungsschlüssel "MyCompany" als Teil der Transaktion hinzugefügt. Er verwendet den UseTransaction-Parameter (usetx), um den Befehl in die aktive Transaktion einzuschließen.

New-Item MyCompany -use

Der folgende Befehl startet eine neue Transaktion. Der Befehl verwendet den Parameter Independent, um anzugeben, dass diese Transaktion kein Abonnent der aktiven Transaktion ist.

Start-Transaction -Independent

Wenn Sie eine unabhängige Transaktion erstellen, wird die neue Transaktion (zuletzt erstellt) zur aktiven Transaktion. Sie können einen Get-Transaction Befehl verwenden, um die aktive Transaktion abzurufen.

Get-Transaction

Beachten Sie, dass "SubscriberCount" der Transaktion 1 ist und angibt, dass keine anderen Abonnenten vorhanden sind und dass die Transaktion neu ist.

RollbackPreference   SubscriberCount   Status
------------------   ---------------   ------
Error                1                 Active

Die neue Transaktion muss abgeschlossen sein (entweder zugesichert oder zurückgesetzt), bevor Sie die ursprüngliche Transaktion verwalten können.

Mit dem folgenden Befehl wird der Registrierung der Schlüssel "MyOtherCompany" hinzugefügt. Er verwendet den UseTransaction-Parameter (usetx), um den Befehl in die aktive Transaktion einzuschließen.

New-Item MyOtherCompany -usetx

Führen Sie jetzt ein Rollback der Transaktion durch. Wenn es eine einzelne Transaktion mit zwei Abonnenten gab, würde ein Rollback der Transaktion die gesamte Transaktion für alle Abonnenten zurückgerollt.

Da diese Transaktionen jedoch unabhängig sind, bricht das Rollback der neuesten Transaktion die Registrierungsänderungen ab und führt die ursprüngliche Transaktion zur aktiven Transaktion aus.

Undo-Transaction

Ein Get-Transaction Befehl bestätigt, dass die ursprüngliche Transaktion in der Sitzung noch aktiv ist.

Get-Transaction
RollbackPreference   SubscriberCount   Status
------------------   ---------------   ------
Error                1                 Active

Mit dem folgenden Befehl wird die aktive Transaktion ausgeführt.

Complete-Transaction

Ein Get-ChildItem Befehl zeigt, dass die Registrierung geändert wurde.

dir m*
Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
 83   1 Microsoft                      {(default)}
  0   0 MyCompany                      {}

Siehe auch