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.

INFORMATIONEN ZU TRANSAKTIONEN

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.

TRANSACTION-CMDLETS

PowerShell enthält mehrere Cmdlets zum Verwalten von Transaktionen.

  • Starttransaktion: Startet eine neue Transaktion.
  • Use-Transaction: Fügt der Transaktion einen Befehl oder Ausdruck hinzu. Der Befehl muss transaktionsfähige Objekte verwenden.
  • Rückgängig-Transaktion: 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

TRANSACTION-ENABLED-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 Vista. Das TransactedString-Objekt (Microsoft.PowerShell.Commands.Management.TransactedString) 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 Wert "Transactions" in der Capabilities-Eigenschaft von Anbietern zu finden:

get-psprovider | where {$_.Capabilities -like "*transactions*"}

Weitere Informationen zu einem Anbieter finden Sie in der Hilfe für den Anbieter. Um die Anbieterhilfe zu erhalten, geben Sie Folgendes ein:

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 TRANSACTION-OBJEKT

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 verwenden, um die Transaktion zu 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", "Commit" und "RolldBack".

  • 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 Befehl "Get-Transaction" eingeben, ruft Get-Transaction 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 Befehl "Rückgängig-Transaktion" zu einem beliebigen Zeitpunkt einen Rollback der gesamten Transaktion für alle Abonnenten durch. Um die Transaktion zu übernehmen, müssen Sie jedoch für jeden Abonnenten einen Befehl "Complete-Transaction" eingeben.

Um die Anzahl der Abonnenten einer Transaktion zu finden, überprüfen Sie die SubscriberCount-Eigenschaft des Transaktionsobjekts. Der folgende Befehl verwendet beispielsweise das Cmdlet Get-Transaction, 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 Cmdlets "Start-Transaction" verwenden.

Wenn Sie eine unabhängige Transaktion starten, erstellt Start-Transaction ein neues Transaktionsobjekt, 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 "get-help registry" ein, um Informationen zum Registrierungsanbieter zu erhalten.

BEISPIEL 1: COMMIT FÜR EINE TRANSAKTION

Verwenden Sie das Cmdlet "Start-Transaction", 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,

Der folgende Befehl, der die aktuelle Position im Softwareschlüssel der HKCU festlegt, ist beispielsweise nicht in der Transaktion enthalten.

cd hkcu:\Software

Der folgende Befehl, der den MyCompany-Schlüssel erstellt, verwendet den UseTransaction-Parameter des Cmdlets "New-Item", 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 Cmdlet "Complete-Transaction", 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 Schlüssel "MyCompany" zur 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 Cmdlet "Start-Transaction", um eine Transaktion zu erstellen. Der folgende Befehl startet eine Transaktion mit den Standardeinstellungen.

start-transaction

Mit dem folgenden Befehl, der den Schlüssel "MyOtherCompany" erstellt, wird der UseTransaction-Parameter des Cmdlets "New-Item" verwendet, 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 Cmdlet "Rückgängig-Transaktion". Da sie sich immer auf die aktive Transaktion auswirkt, geben Sie die Transaktion nicht an.

Undo-transaction

Das Ergebnis ist, dass der Schlüssel "MyOtherCompany" 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 Befehl "Get-ChildItem" verwenden (der Alias ist "dir"), um eine Vorschau der Änderungen in einer Transaktion anzuzeigen.

Der folgende Befehl startet eine Transaktion.

start-transaction

Der folgende Befehl verwendet das Cmdlet New-ItemProperty, um den Registrierungseintrag "MyKey" 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

Verwenden Sie zum Abrufen der Elemente, die sich derzeit in der Registrierung befinden, 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 Schlüssel "MyCompany" 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 für die Transaktion anzuzeigen, geben Sie einen Befehl "Get-ChildItem"("dir") 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 Schlüssel "MyCompany" hinzugefügt wird.

Hive: HKEY_CURRENT_USER\Software

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

BEISPIEL 4: KOMBINIEREN VON TRANSACTED- UND NICHT-TRANSACTED-BEFEHLEN

Sie können während einer Transaktion Nicht-Transaktionen-Befehle eingeben. Die nicht durchgeführten 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 Cmdlet "New-Item", 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 Befehl "Get-ChildItem ("dir") ohne den UseTransaction-Parameter. Dieser Befehl ruft Elemente ab, die mit "M" beginnen.

dir m*

Das Ergebnis zeigt, dass der Schlüssel "MyCompany2" zur Registrierung hinzugefügt wird, aber die Schlüssel "MyCompany1" und "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 Cmdlet "New-Item", um der Registrierung den Schlüssel "MyCompany" 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 Befehl "Get-Transaction" 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-Parameter von Start-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 Cmdlet Use-Transaction 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

Mit dem folgenden Befehl "New-Object" wird eine Instanz der TransactedString-Klasse erstellt und in der variablen $t gespeichert.

$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, wird 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 von Use-Transaction festgelegt. Der UseTransaction-Parameter (UseTx) ist erforderlich.

use-transaction {$t.append(" PowerShell")} -usetx

Verwenden Sie die ToString-Methode des TransactedString-Objekts, um den aktuellen Inhalt der TransactedString-Zeichenfolge in $t 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 {$s.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 Befehl "Get-Transaction", um die aktive Transaktion abzurufen.

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 Befehl "Starttransaktion", 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 Befehl "Get-Transaction" 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 Cmdlet New-ItemProperty, 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 Befehl "Get-Transaction" zeigt an, dass die Abonnentenanzahl des Transaktionsobjekts 1 ist, der Wert des Status ist jedoch 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 Starttransaktionsbefehl einen Befehl "Complete-Transaction" eingeben.

complete-transaction

Ein weiterer Befehl "Get-Transaction" zeigt an, 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 von Start-Transaction verwenden, um die neue Transaktion unabhängig von der ursprünglichen Transaktion zu machen.

Wenn Sie dies tun, erstellt Start-Transaction ein neues Transaktionsobjekt und macht 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 Befehl "Get-Transaction", um die aktive Transaktion abzurufen.

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 Befehl "Get-Transaction" 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                      {}

Weitere Informationen