about_Transactions

Letzte Aktualisierung: Mai 2014

Betrifft: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

THEMA

about_Transactions

KURZE BESCHREIBUNG

Beschreibt die Verwaltung von Transaktionsvorgängen in Windows PowerShell®.

LANGE BESCHREIBUNG

Transaktionen werden in Windows PowerShell ab Windows PowerShell 2.0 unterstützt. Mit diesem Feature können Sie eine Transaktion starten, um anzugeben, welche Befehle Teil der Transaktion sind, und einen Commit oder Rollback der Transaktion auszuführen.

INFORMATIONEN ZU TRANSAKTIONEN

In Windows PowerShell ist eine Transaktion ein Satz von einem oder mehreren Befehlen, die als eine logische Einheit verwaltet werden. Eine Transaktion kann abgeschlossen werden („Commit“), wodurch die von der Transaktion betroffenen Daten geändert werden. Eine Transaktion kann aber auch vollständig rückgängig gemacht („Rollback“), sodass die betroffenen Daten nicht von der Transaktion geändert werden.

Da die Befehle in einer Transaktion als Einheit verwaltet werden, wird entweder für alle Befehle ein Commit ausgeführt, oder alle Befehle werden zurückgesetzt.

Transaktionen werden in der Datenverarbeitung häufig ausgeführt, insbesondere bei Datenbankvorgängen und als finanzielle Transaktionen. Transaktionen werden am häufigsten verwendet, wenn das schlimmstmögliche Szenario für eine Reihe von Befehlen nicht darin besteht, dass alle fehlschlagen, sondern dass einige Befehle erfolgreich ausgeführt werden, während andere fehlschlagen, sodass das System in einem beschädigten, falschen oder uninterpretierbaren Zustand zurückgelassen wird.

TRANSAKTIONSCMDLETS

Windows PowerShell enthält mehrere Cmdlets für die Verwaltung von Transaktionen.

      Cmdlet                 Description
      --------------         ---------------------------------    
      Start-Transaction      Starts a new transaction. 

      Use-Transaction        Adds a command or expression to the
                             transaction. The command must use
                             transaction-enabled objects.

      Undo-Transaction       Rolls back the transaction so that
                             no data is changed by the transaction.

      Complete-Transaction   Commits the transaction. The data
                             affected by the transaction is changed.

      Get-Transaction        Gets information about the active
                             transaction.

Um eine Liste der Transaktionscmdlets anzuzeigen, geben Sie ein:

          get-command *transaction

Ausführliche Informationen zu diesen Cmdlets erhalten Sie mit folgendem Befehl:

          get-help <cmdlet-name> -detailed

Zum Beispiel:

          get-help use-transaction -detailed

TRANSAKTIONSFÄHIGE ELEMENTE

Zur Teilnahme an einer Transaktion 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 Registrierungsanbieter von Windows PowerShell unterstützt Transaktionen in Windows Vista. Das TransactedString-Objekt (Microsoft.PowerShell.Commands.Management.TransactedString) ist mit jedem Betriebssystem einsetzbar, dass Windows PowerShell ausführt.

Andere Windows PowerShell-Anbieter können Transaktionen unterstützen. Um Windows PowerShell-Anbieter in Ihrer Sitzung zu finden, die Transaktionen unterstützen, verwenden Sie den folgenden Befehl, um den Wert „Transactions“ in der Capabilities-Eigenschaft des Anbieters zu suchen:

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

Weitere Informationen zu einem Anbieter finden Sie in der Hilfe zu dem Anbieter. Um Anbieterhilfe zu erhalten, geben Sie Folgendes ein:

        get-help <provider-name>

Wenn Sie z. B. Hilfe zum Registrierungsanbieter benötigen, geben Sie Folgendes ein:

        get-help registry

DER USETRANSACTION-PARAMETER

Cmdlets, die Transaktionen unterstützen können, verfügen über einen UseTransaction-Parameter. Dieser Parameter schließt den Befehl in die aktive Transaktion ein. Sie können den vollständigen Parameternamen oder seinen 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, schlägt der Befehl fehl, wenn keine aktive Transaktion vorhanden ist.

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

        get-help * -parameter UseTransaction

Im Windows PowerShell-Kern unterstützen alle Cmdlets Transaktionen, die zur Verwendung mit Windows PowerShell-Anbietern geeignet sind. Daher können Sie die Anbietercmdlets zum Verwalten von Transaktionen verwenden.

Weitere Informationen zu Windows PowerShell-Anbietern finden Sie unter „about_Providers“.

DAS TRANSAKTIONSOBJEKT

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

Das Objekt hat die folgenden Eigenschaften:

RollbackPreference:

Enthält die Rollbackvoreinstellung für die aktuelle Transaktion. Sie können die Rollbackvoreinstellung festlegen, wenn Sie „Start-Transaction“ verwenden, um die Transaktion zu starten.

Die Rollbackvoreinstellung bestimmt die Umstände, 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. Einer Transaktion wird ein Abonnent hinzugefügt, wenn Sie eine Transaktion starten, während eine andere Transaktion ausgeführt wird. Die Anzahl der Abonnenten wird verringert, wenn ein Abonnent der Transaktion einen Commit ausführt.

AKTIVE TRANSAKTIONEN

In Windows PowerShell ist nur eine Transaktion zu einem Zeitpunkt aktiv, und Sie können nur die aktive Transaktion verwalten. Mehrere Transaktionen können in der gleichen Sitzung zur gleichen Zeit ausgeführt werden, aber nur die zuletzt gestartete Transaktion ist aktiv.

Daher können nicht Sie eine bestimmte Transaktion angeben, wenn Sie die Transaktionscmdlets verwenden. Befehle gelten immer für die aktive Transaktion.

Dies wird besonders am Verhalten des Cmdlets „Get-Transaction“ deutlich. Wenn Sie einen Get-Transaction-Befehl eingeben, ruft Get-Transaction immer nur ein einziges Transaktionsobjekt auf. 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 einen Commit oder einen Rollback. Wenn Sie dies tun, wird die vorherige Transaktion automatisch aktiviert. Transaktionen werden in der umgekehrten Reihenfolge aktiv, in der sie gestartet wurden, 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 Windows PowerShell standardmäßig keine neue Transaktion. Stattdessen wird der aktuellen Transaktion ein „Abonnent“ hinzugefügt.

Wenn eine Transaktion mehrere Abonnenten hat, setzt ein einzelner Undo-Transaction-Befehl an einem beliebigen Punkt die gesamte Transaktion für alle Abonnenten zurück. Um die Transaktion abzuschließen, müssen Sie jedoch für jeden Abonnenten einen Complete-Transaction-Befehl eingeben.

Um die Anzahl der Abonnenten einer Transaktion zu finden, überprüfen Sie die SubscriberCount-Eigenschaft des Transaktionsobjekts. Beispielsweise verwendet der folgende Befehl das Cmdlet „Get-Transaction“, um den Wert der Eigenschaft „SubscriberCount“ 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 eine eigene Transaktion enthält. Da die Transaktionen in Zusammenhang stehen, sollte ein Rollback oder Commit für sie als Einheit ausgeführt werden.

Allerdings können Sie mit dem Independent-Parameter des Cmdlets „Start-Transaction“ eine Transaktion starten, die von der aktuellen Transaktion unabhängig ist.

Wenn Sie eine unabhängige Transaktion starten, erstellt „Start-Transaction“ ein neues Transaktionsobjekt, und die neue Transaktion wird zur aktiven Transaktion. Ein Commit oder Rollback der unabhängigen Transaktion kann ohne Auswirkung auf die ursprüngliche Transaktion ausgeführt werden.

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

ÄNDERN VON DATEN

Wenn Sie Transaktionen verwenden, um Daten zu ändern, werden die Daten, die von der Transaktion betroffen sind, nicht geändert, bis Sie für die Transaktion einen Commit ausführen. Allerdings können die gleichen Daten von Befehlen geändert werden, die nicht Teil der Transaktion sind.

Beachten Sie dies, wenn Sie Transaktionen verwenden, um freigegebene Daten zu verwalten. In der Regel verfügen Datenbanken über Mechanismen, die die Daten sperren, während Sie daran arbeiten, um zu verhindern, dass andere Benutzer und andere Befehle, Skripts und Funktionen sie ändern.

Die Sperre ist jedoch ein Feature der Datenbank. Sie ist nicht mit Transaktionen verknüpft. Wenn Sie in einem transaktionsgeeigneten Dateisystem oder sonstigem Datenspeicher arbeiten, können die Daten geändert werden, während die Transaktion ausgeführt wird.

BEISPIELE

In den Beispielen dieses Abschnitts wird der Windows PowerShell-Registrierungsanbieter verwendet und vorausgesetzt, dass Sie mit ihm vertraut sind. Um Informationen zum Registrierungsanbieter zu erhalten, geben Sie „get-help registry“ ein.

BEISPIEL 1: COMMIT EINER TRANSAKTION

Um eine Transaktion zu erstellen, verwenden Sie das Cmdlet „Start-Transaction“. Der folgende Befehl startet eine Transaktion mit den Standardeinstellungen.

        start-transaction

Um Befehle in die Transaktion einzubeziehen, verwenden Sie den UseTransaction-Parameter des Cmdlets. Standardmäßig werden Befehle nicht in die Transaktion einbezogen.

Der folgende Befehl, der den aktuellen Speicherort im Schlüssel „Software“ von „HKCU: drive“ festlegt, wird z. B. nicht in die Transaktion einbezogen.

        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                      {}

Um einen Commit der Transaktion auszuführen, verwenden Sie das Complete-Transaction-Cmdlet. Da es immer die aktive Transaktion beeinflusst, können Sie die Transaktion nicht angeben.

        complete-transaction

Das Ergebnis ist, dass der MyCompany-Schlüssel der Registrierung hinzugefügt wird.

        dir m*
       
        Hive: HKEY_CURRENT_USER\software

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

BEISPIEL 2: ROLLBACK EINER TRANSAKTION

Um eine Transaktion zu erstellen, verwenden Sie das Cmdlet „Start-Transaction“. Der folgende Befehl startet eine Transaktion mit den Standardeinstellungen.

        start-transaction

Der folgende Befehl, der den MyOtherCompany-Schlüssel erstellt, verwendet den UseTransaction-Parameter des Cmdlets „New-Item“, 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 das Undo-Transaction-Cmdlet, um ein Rollback der Transaktion auszuführen. Da es immer die aktive Transaktion beeinflusst, geben Sie die Transaktion nicht an.

        Undo-transaction

Das Ergebnis ist, dass der MyOtherCompany-Schlüssel nicht der 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 DER VORSCHAU EINER TRANSAKTION

In der Regel ändern die in einer Transaktion verwendeten Befehle Daten. Jedoch sind die Befehle, die Daten abrufen, in einer Transaktion auch nützlich, da sie Daten innerhalb der Transaktion abrufen. Dies ermöglicht eine Vorschau der Änderungen, zu denen ein Commit der Transaktion führen würde.

Das folgende Beispiel zeigt, wie mit dem Get-ChildItem-Befehl (Alias „dir“) die Änderungen in einer Transaktion in der Vorschau angezeigt werden.

Der folgende Befehl startet eine Transaktion.

        start-transaction

Der folgende Befehl verwendet das Cmdlet „New-ItemProperty“, um den MyKey-Registrierungseintrag dem MyCompany-Schlüssel hinzuzufügen. Der Befehl schließt den Befehl mit dem UseTransaction-Parameter in die Transaktion ein.

        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 derzeit in der Registrierung enthalten sind, 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                      {}

Geben Sie einen Get-ChildItem-Befehl („dir“) mit dem UseTransaction-Parameter ein, um die Auswirkungen des Commits der Transaktion in der Vorschau anzuzeigen. Dieser Befehl bietet eine Ansicht der Daten innerhalb der Transaktion.

        dir m* -useTransaction

Das Ergebnis zeigt, dass der Eintrag „MyKey“ dem MyCompany-Schlüssel hinzugefügt wird, wenn für die Transaktion ein Commit ausgeführt wird.

        Hive: HKEY_CURRENT_USER\Software

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

BEISPIEL 4: KOMBINIEREN VON TRANSAKTIONS- UND NICHTTRANSAKTIONSBEFEHLEN

Sie können während einer Transaktion Nichttransaktionsbefehle eingeben. Nichttransaktionsbefehle beeinflussen die Daten sofort, aber sie haben keinen Einfluss auf die Transaktion.

Der folgende Befehl startet eine Transaktion im Registrierungsschlüssel „HKCU:\Software“.

        start-transaction

Die folgenden drei Befehle fügen mit dem Cmdlet „New-Item“ der Registrierung Schlüssel hinzu. Der erste und dritte Befehl schließen mit dem UseTransaction-Parameter Befehle in die Transaktion ein. Der zweite Befehl lässt den Parameter aus. Da der zweite Befehl nicht in der Transaktion enthalten ist, wird 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-Befehl („dir“) ohne den UseTransaction-Parameter. Dieser Befehl ruft Elemente ab, die mit „M“ beginnen.

        dir m*

Das Ergebnis zeigt, dass der MyCompany2-Schlüssel der Registrierung hinzugefügt wird, aber der MyCompany1- und MyCompany3-Schlüssel, 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 der Transaktion aus.

        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: VERWENDUNG DES AUTOMATISCHEN ROLLBACKS

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

Dieses Standardverhalten ist für Skripts vorgesehen, die Transaktionen ausführen. Skripts werden in der Regel gut getestet und enthalten Fehlerbehandlungscode, sodass Fehler nicht erwartet werden und die Transaktion beenden sollten.

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

        start-transaction

Der folgende Befehl verwendet das Cmdlet „New-Item“, um den MyCompany-Schlüssel der 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 es wird ein Rollback der Transaktion ausgeführt.

        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 ein Rollback der Transaktion ausgeführt wurde, und „SubscriberCount“ den Wert 0 hat.

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

BEISPIEL 6: ÄNDERN DER ROLLBACKVOREINSTELLUNG

Wenn die Transaktion fehlertoleranter sein soll, können Sie mit dem RollbackPreference-Parameter von Start-Transaction die Voreinstellung ändern.

Der folgende Befehl startet eine Transaktion mit der Rollbackeinstellung „Never“.

         start-transaction -rollbackpreference Never

Wenn in diesem Fall der Befehl fehlschlägt, wird die Transaktion 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: VERWENDUNG DES USE-TRANSACTION-CMDLETS

Mit dem Use-Transaction-Cmdlet können Sie direkt Skripts für transaktionsfähige Microsoft .NET Framework-Objekte erstellen. Use-Transaction nimmt einen Skriptblock entgegen, 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 Variablen „$t“.

         $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 die gleiche Append-Methode zum Hinzufügen von Text, aber er fügt den Text als Teil der Transaktion hinzu. Der Befehl ist in geschweifte Klammern eingeschlossen und wird als Wert des Parameters „ScriptBlock“ von „Use-Transaction“ festgelegt. Der UseTransaction-Parameter („UseTx“) ist erforderlich.

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

Um den aktuellen Inhalt der Transaktionszeichenfolge in „$t“ anzuzeigen, verwenden Sie die ToString-Methode des TransactedString-Objekts.

        $t.tostring()

Die Ausgabe zeigt, dass nur die nicht transaktionsbezogenen Änderungen wirksam werden.

        Windows

Um den aktuellen Inhalt der Transaktionszeichenfolge in „$t“ aus der Transaktion heraus anzuzeigen, betten Sie den Ausdruck in einen Use-Transaction-Befehl ein.

        use-transaction {$s.tostring()} -usetx

Die Ausgabe zeigt die Transaktionsansicht.

        Windows PowerShell

Der folgende Befehl führt einen Commit der Transaktion aus.

        complete-transaction

So zeigen Sie die Ergebniszeichenfolge an:

        $t.tostring()

        Windows PowerShell

BEISPIEL 7: VERWALTEN VON TRANSAKTIONEN MIT MEHREREN ABONNENTEN

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

Dieses Beispiel veranschaulicht das Anzeigen und Verwalten einer Transaktion mit mehreren Abonnenten.

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

        start-transaction

Der folgende Befehl ruft mit dem Befehl „Get-Transaction“ die aktive Transaktion ab.

        get-transaction

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

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

Der folgende Befehl fügt den MyCompany-Schlüssel der Registrierung hinzu. Der Befehl schließt den Befehl mit dem UseTransaction-Parameter in die Transaktion ein.

        new-item MyCompany -UseTransaction

Der folgende Befehl startet mit dem Befehl „Start-Transaction“ eine Transaktion. Obwohl dieser Befehl an der Eingabeaufforderung eingegeben wird, tritt dieses Szenario wahrscheinlicher auf, wenn Sie ein Skript ausführen, das eine Transaktion enthält.

        start-transaction

Ein Get-Transaction-Befehl zeigt, dass die Anzahl der Abonnenten auf dem Transaktionsobjekt heraufgesetzt wird. Der Wert ist jetzt 2.

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

Der nächste Befehl verwendet das Cmdlet „New-ItemProperty“, um den MyKey-Registrierungseintrag dem MyCompany-Schlüssel hinzuzufügen. Er schließt den Befehl mit dem UseTransaction-Parameter in die Transaktion ein.

        new-itemproperty -path MyCompany -name MyKey -UseTransaction

Der MyCompany-Schlüssel ist nicht in der Registrierung vorhanden, aber dieser Befehl wird erfolgreich ausgeführt, da die beiden Befehle Teil der gleichen Transaktion sind.

Der folgende Befehl führt einen Commit der Transaktion aus. Wenn er einen Rollback der Transaktion ausführen würde, würde dieser Rollback für alle Abonnenten ausgeführt.

        complete-transaction

Ein Get-Transaction-Befehl zeigt, dass die Anzahl der Abonnenten für das Transaktionsobjekt 1 beträgt, aber der Wert von „Status“ ist immer noch „Active“ (es wurde kein Commit ausgeführt).

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

Um den Commit der Transaktion zu beenden, geben Sie einen zweiten Complete-Transaction-Befehl ein. Um einen Commit für eine Transaktion mit mehreren Abonnenten auszuführen, müssen Sie für jeden Start-Transaction-Befehl einen Complete-Transaction-Befehl eingeben.

        complete-transaction

Ein weiterer Get-Transaction-Befehl zeigt an, dass ein Commit der Transaktion ausgeführt wurde.

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

BEISPIEL 8: VERWALTEN VON UNABHÄNGIGEN TRANSAKTIONEN

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

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

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

        start-transaction

Der folgende Befehl ruft mit dem Befehl „Get-Transaction“ die aktive Transaktion ab.

        get-transaction

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

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

Der folgende Befehl fügt den Registrierungsschlüssel MyCompany als Teil der Transaktion hinzu. Er schließt den Befehl mit dem UseTransaction-Parameter („UseTx“) in die aktive Transaktion ein.

        new-item MyCompany -use

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

         start-transaction -independent

Wenn Sie eine unabhängige Transaktion erstellen, wird die neue (zuletzt erstellte) Transaktion die aktive Transaktion. Sie können die aktive Transaktion mit einem Get-Transaction-Befehl abrufen.

        get-transaction

Beachten Sie, dass die Transaktion einen „SubscriberCount“ von 1 hat, d. h. es gibt keine anderen Abonnenten, und die Transaktion ist neu.

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

Die neue Transaktion muss (entweder mit Commit oder Rollback) beendet werden, bevor Sie die ursprüngliche Transaktion verwalten können.

Der folgende Befehl fügt den MyOtherCompany-Schlüssel der Registrierung hinzu. Er schließt den Befehl mit dem UseTransaction-Parameter („UseTx“) in die aktive Transaktion ein.

        new-item MyOtherCompany -usetx

Führen Sie jetzt ein Rollback der Transaktion aus. Wenn eine einzelne Transaktion mit zwei Abonnenten vorliegen würde, würde ein Rollback der Transaktion die gesamte Transaktion für alle Abonnenten zurücksetzen.

Da diese Transaktionen jedoch unabhängig sind, widerruft ein Rollback der neuesten Transaktion die Änderungen an der Registrierung und macht die ursprüngliche Transaktion zur aktiven Transaktion.

        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

Der folgende Befehl führt einen Commit der aktiven Transaktion aus.

        complete-transaction

Ein Get-ChildItem-Befehl zeigt an, 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

Start-Transaction

Get-Transaction

Complete-Transaction

Undo-Transaction

Use-Transaction

Registrierung (Anbieter)

about_Providers

Get-PSProvider

Get-ChildItem