THEMA about_Transactions KURZBESCHREIBUNG Beschreibt die Verwaltung von Transaktionsvorgängen in Windows PowerShell. DETAILBESCHREIBUNG Transaktionen werden in Windows PowerShell ab Windows PowerShell 2.0 unterstützt. Mit diesem Feature können Sie Transaktionen starten, die Befehle angeben, die Teil der Transaktion sind, sowie für eine Transaktion einen Commit ausführen und diese zurücksetzen. INFORMATIONEN ZU TRANSAKTIONEN In Windows PowerShell werden als Transaktion Sätze von einem oder mehreren Befehlen bezeichnet, die als logische Einheit verwaltet werden. Eine Transaktion kann abgeschlossen werden (ein "Commit" wird ausgeführt), um die von der Transaktion betroffenen Daten zu ändern. Transaktionen können auch vollständig rückgängig gemacht werden ("zurückgesetzt"), sodass die betroffenen Daten von der Transaktion nicht 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 verwendet, besonders für Datenbankvorgänge und Finanztransaktionen. Transaktionen werden am häufigsten verwendet, wenn eine Gruppe von Befehlen im schlimmsten Fall nicht einfach nicht ausgeführt wird, sondern einige Befehle erfolgreich ausgeführt werden, während andere fehlschlagen und das System dadurch in einem beschädigten, falschen oder nicht interpretierbaren Status hinterlassen wird, der nur mit Schwierigkeiten repariert werden kann. TRANSACTION-CMDLETS Windows PowerShell enthält verschiedene Cmdlets für die Verwaltung von Transaktionen. Cmdlet Beschreibung -------------- --------------------------------- Start-Transaction Startet eine neue Transaktion. Use-Transaction Fügt der Transaktion einen Befehl oder einen Ausdruck hinzu. Für den Befehl müssen für Transaktionen aktivierte Objekte verwendet werden. Undo-Transaction Setzt die Transaktion zurück, sodass keine Daten von der Transaktion geändert werden. Complete-Transaction Führt einen Commit für die Transaktion aus. Die von der Transaktion betroffenen Daten werden geändert. Get-Transaction Ruft Informationen zur aktiven Transaktion ab. Eine Liste von Transaction-Cmdlets erhalten Sie mit folgendem Befehl: get-command *transaction Ausführliche Informationen zu diesen Cmdlets erhalten Sie mit folgendem Befehl: get-help <Cmdlet-Name> -detailed Beispiel: get-help use-transaction -detailed FÜR TRANSAKTIONEN AKTIVIERTE ELEMENTE Um an einer Transaktion teilnehmen zu können, müssen das Cmdlet und der Anbieter Transaktionen unterstützen. Dieses Feature ist in die von der Transaktion betroffenen Objekte integriert. Der Windows PowerShell-Registrierungsanbieter unterstützt Transaktionen unter Windows Vista. Das TransactedString-Objekt (Microsoft.PowerShell.Commands.Management.TransactedString) kann unter jedem Betriebssystem verwendet werden, in dem Windows PowerShell ausgeführt wird. Andere Windows PowerShell-Anbieter können ebenfalls Transaktionen unterstützen. Wenn Sie die Windows PowerShell-Anbieter in der Sitzung suchen möchten, die Transaktionen unterstützen, verwenden Sie den folgenden Befehl, um in der Capabilities-Eigenschaft der Anbieter den Wert "Transactions" zu suchen: get-psprovider | where {$_.Capabilities -like "*transactions*"} Weitere Informationen zu einem Anbieter finden Sie in der Hilfe für den betreffenden Anbieter. Wenn Sie Hilfe zu einem Anbieter abrufen möchten, geben Sie Folgendes ein: get-help <Anbietername> Hilfeinformationen zum Registrierungsanbieter können Sie z. B. mit folgendem Befehl abrufen: get-help registry DER USETRANSACTION-PARAMETER Cmdlets, die Transaktionen unterstützen, verfügen über einen UseTransaction-Parameter. Mit diesem Parameter wird der Befehl in der aktiven Transaktion eingeschlossen. Sie können den vollständigen Namen des Parameters oder aber dessen 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 und keine aktive Transaktion vorhanden ist, wird für den Befehl ein Fehler ausgegeben. Wenn Sie Cmdlets mit dem UseTransaction-Parameter suchen möchten, geben Sie Folgendes ein: get-help * -parameter UseTransaction Alle Kern-Cmdlets von Windows PowerShell, die mit Windows PowerShell-Anbietern verwendet werden können, unterstützen Transaktionen. Daher können Sie Transaktionen über die Anbieter-Cmdlets verwalten. Weitere Informationen zur Windows PowerShell-Anbietern finden Sie unter "about_Providers". DAS TRANSACTION-OBJEKT Transaktionen werden in Windows PowerShell durch ein Transaktionsobjekt, System.Management.Automation.Transaction, dargestellt. Das Objekt verfügt über die folgenden Eigenschaften: RollbackPreference: Enthält die Einstellungen für die Zurücksetzung der aktuellen Transaktion. Die Einstellung für die Zurücksetzung können Sie festlegen, wenn Sie die Transaktion mit Start-Transaction starten. Die Einstellung für die Zurücksetzung bestimmt die Bedingungen, unter denen die Transaktion automatisch zurückgesetzt wird. Gültig sind die Werte "Error", "TerminatingError" und "Never". Der Standardwert ist "Error". Status: Enthält den aktuellen Status der Transaktion. Gültig sind die Werte "Active", "Committed" und "RolledBack". SubscriberCount: Enthält die Anzahl der Abonnenten für die Transaktion. Einer Transaktion wird ein Abonnent hinzugefügt, wenn Sie eine Transaktion starten, während eine andere Transaktion ausgeführt wird. Die Abonnentenanzahl wird gesenkt, wenn ein Abonnent einen Commit für die Transaktion ausführt. AKTIVE TRANSAKTIONEN In Windows PowerShell ist jeweils nur eine Transaktion aktiv, und Sie können nur die aktive Transaktion verwalten. In einer einzelnen Sitzung können mehrere Transaktionen gleichzeitig ausgeführt werden, jedoch ist nur die zuletzt gestartete Transaktion aktiv. Daher können Sie beim Verwenden der Transaction-Cmdlets keine bestimmte Transaktion angeben. Befehle werden immer auf die aktive Transaktion angewendet. Im Verhalten des Cmdlet "Get-Transaction" wird dies am offensichtlichsten. Wenn Sie den Befehl "Get-Transaction" eingeben, ruft Get-Transaction stets nur ein Transaktionsobjekt ab. Dieses Objekt stellt die aktive Transaktion dar. Wenn Sie eine andere Transaktion verwalten möchten, müssen Sie zuerst die aktive Transaktion beenden, indem Sie für diese einen Commit ausführen oder sie zurücksetzen. In diesem Fall wird die vorherige Transaktion automatisch aktiv. Transaktionen werden in der umgekehrten Reihenfolge aktiv, in der sie gestartet wurden, sodass immer die zuletzt gestartete Transaktion aktiv ist. ABONNENTEN AND UNABHÄNGIGE TRANSAKTIONEN Wenn Sie eine Transaktion starten, während eine andere Transaktion ausgeführt wird, wird von Windows PowerShell standardmäßig keine neue Transaktion gestartet. Stattdessen wird der aktuellen Transaktion ein "Abonnent" hinzugefügt. Wenn eine Transaktion mehrere Abonnenten umfasst, wird mit dem einzelnen Befehl "Undo-Transaction" zu beliebigem Zeitpunkt die gesamte Transaktion für alle Abonnenten zurückgesetzt. Um jedoch einen Commit für die Transaktion auszuführen, müssen Sie den Befehl "Complete-Transaction" für jeden Abonnenten eingeben. Wenn Sie die Anzahl von Abonnenten für eine Transaktion suchen möchten, überprüfen Sie die SubscriberCount-Eigenschaft des Transaktionsobjekts. Im folgenden Befehl wird z. B. das Cmdlet "Get-Transaction" verwendet, um den Wert für die SubscriberCount -Eigenschaft der aktiven Transaktion abzurufen: (Get-Transaction).SubscriberCount Im Standardverhalten wird ein Abonnent hinzugefügt, da sich die meisten Transaktionen, die gestartet werden, während eine andere Transaktion ausgeführt wird, auf die ursprüngliche Transaktion beziehen. In einem typischen Modell wird mit einem Skript, das eine Transaktion enthält, ein Hilfsskript aufgerufen, das eine eigene Transaktion enthält. Da die Transaktionen aufeinander bezogen sind, müssen sie zurückgesetzt werden, oder muss ein einzelner Commit für alle ausgeführt werden. Mit dem Independent-Parameter des Cmdlet "Start-Transaction" können Sie jedoch eine Transaktion starten, die von der aktuellen Transaktion unabhängig ist. Wenn Sie eine unabhängige Transaktion starten, wird mit Start-Transaction ein neues Transaktionsobjekt erstellt, und die neue Transaktion wird aktiv. Für die unabhängige Transaktion kann ein Commit ausgeführt werden, oder sie kann zurückgesetzt werden, ohne dass die ursprüngliche Transaktion beeinflusst wird. Wenn die unabhängige Transaktion beendet wird (durch Commit oder Zurücksetzen), wird die ursprüngliche Transaktion wieder aktiv. ÄNDERN VON DATEN Wenn Sie mit Transaktionen Daten ändern, werden die von der Transaktion betroffenen Daten erst geändert, wenn Sie für die Transaktion einen Commit ausgeführt haben. Dieselben Daten können jedoch von Befehlen geändert werden, die nicht Teil der Transaktion sind. Diesen Umstand sollten Sie nicht vergessen, wenn Sie mit Transaktionen freigegebene Daten verwalten. In der Regel verfügen Datenbanken über Mechanismen, mit denen die Daten gesperrt werden, während Sie an diesen arbeiten. Damit wird verhindert, dass diese von anderen Benutzern und anderen Befehlen, Skripts und Funktionen geändert werden. Diese Sperre bildet jedoch ein Feature der Datenbank. Mit den Transaktionen steht sie in keinem Bezug. Wenn Sie mit einem für Transaktionen aktivierten Dateisystem oder einem anderem Datenspeicher arbeiten, können die Daten geändert werden, während die Transaktion ausgeführt wird. BEISPIELE In den Beispielen in diesem Abschnitt wird der Windows PowerShell- Registrierungsanbieter verwendet, und es wird davon ausgegangen, dass Sie mit diesem vertraut sind. Wenn Sie Informationen zum Registrierungsanbieter benötigen, geben Sie "get-help registry" ein. BEISPIEL 1: AUSFÜHREN EINES COMMITS FÜR EINE TRANSAKTION Das Cmdlet "Start-Transaction" ermöglicht das Erstellen einer Transaktion. Mit dem folgenden Befehl starten Sie eine Transaktion mit den Standardeinstellungen. start-transaction Wenn Sie Befehle in die Transaktion einschließen möchten, verwenden Sie den UseTransaction-Parameter des Cmdlet. Standardmäßig werden Befehle nicht in die Transaktion eingeschlossen. Zum Beispiel ist der folgende Befehl, mit dem der aktuellen Speicherort im Schlüssel "Software" des Laufwerks "HKCU:" festlegt wird, nicht in die Transaktion eingeschlossen. cd hkcu:\Software Im folgenden Befehl zum Erstellen des Schlüssels "MyCompany" wird mit dem UseTransaction-Parameter des Cmdlet "New-Item" der Befehl in die aktive Transaktion eingeschlossen. new-item MyCompany -UseTransaction Mit dem Befehl wird ein Objekt zurückgegeben, das den neuen Schlüssel darstellt, doch da der Befehl Teil der Transaktion ist, wird die Registrierung noch nicht geändert. Struktur: HKEY_CURRENT_USER\Software SKC VC Name Property --- -- ---- -------- 0 0 MyCompany {} Wenn Sie für die Transaktion einen Commit ausführen möchten, verwenden Sie das Cmdlet "Complete-Transaction". Da dieses sich stets auf die aktive Transaktion auswirkt, können Sie die Transaktion nicht angeben. complete-transaction Als Ergebnis wird der Schlüssel "MyCompany" der Registrierung hinzugefügt. dir m* Struktur: HKEY_CURRENT_USER\software SKC VC Name Property --- -- ---- -------- 83 1 Microsoft {(default)} 0 0 MyCompany {} BEISPIEL 2: ZURÜCKSETZEN EINER TRANSAKTION Das Cmdlet "Start-Transaction" ermöglicht das Erstellen einer Transaktion. Mit dem folgenden Befehl starten Sie eine Transaktion mit den Standardeinstellungen. start-transaction Im folgenden Befehl zum Erstellen des Schlüssels "MyOtherCompany" wird mit dem UseTransaction-Parameter des Cmdlet "New-Item" der Befehl in die aktive Transaktion eingeschlossen. new-item MyOtherCompany -UseTransaction Mit dem Befehl wird ein Objekt zurückgegeben, das den neuen Schlüssel darstellt, doch da der Befehl Teil der Transaktion ist, wird die Registrierung noch nicht geändert. Struktur: HKEY_CURRENT_USER\Software SKC VC Name Property --- -- ---- -------- 0 0 MyOtherCompany {} Zum Zurücksetzen der Transaktion verwenden Sie das Cmdlet "Undo-Transaction". Da dieses sich stets auf die aktive Transaktion auswirkt, geben Sie die Transaktion nicht an. Undo-transaction Im Ergebnis wird der Schlüssel "MyOtherCompany" der Registrierung nicht hinzugefügt. dir m* Struktur: HKEY_CURRENT_USER\software SKC VC Name Property --- -- ---- -------- 83 1 Microsoft {(default)} 0 0 MyCompany {} BEISPIEL 3: ANZEIGEN EINER TRANSAKTION IN DER VORSCHAU In der Regel werden durch die in Transaktionen verwendeten Befehle Daten geändert. Befehle zum Abrufen von Daten sind in einer Transaktion jedoch auch nützlich, da die Daten so innerhalb der Transaktion abgerufen werden. Dies ermöglicht eine Vorschau der Änderungen, die bei einem Commit für die Transaktion verursacht werden. Im folgenden Beispiel wird gezeigt, wie mit dem Befehl "Get-ChildItem" (Alias: "dir") die Änderungen in einer Transaktion als Vorschau angezeigt werden. Mit dem folgenden Befehl wird eine Transaktion gestartet. start-transaction Im folgenden Befehl wird der Registrierungsschlüssel "MyKey" mit dem Cmdlet "New-ItemProperty" dem Schlüssel "MyCompany" hinzugefügt. In dem Befehl wird mit dem UseTransaction-Parameter der Befehl in die Transaktion eingeschlossen. new-itemproperty -path MyCompany -Name MyKey -value 123 -UseTransaction Der Befehl gibt ein Objekt zurück, das den neuen Registrierungsein trag darstellt, jedoch wird der Registrierungseintrag nicht geändert. MyKey ----- 123 Wenn Sie die derzeit in der Registrierung vorhandenen Elemente abrufen möchten, verwenden Sie den Befehl "Get-ChildItem" ("dir") ohne den UseTransaction-Parameter. Mit dem folgenden Befehl werden Elemente abgerufen, die mit "M" beginnen. dir m* Das Ergebnis zeigt, dass dem Schlüssel MyCompany noch keine Einträge hinzugefügt wurden. Struktur: HKEY_CURRENT_USER\Software SKC VC Name Property --- -- ---- -------- 83 1 Microsoft {(default)} 0 0 MyCompany {} Wenn Sie Auswirkungen eines Commits für die Transaktion in der Vorschau anzeigen möchten, geben Sie den Befehl "Get-ChildItem" ("dir") mit dem UseTransaction-Parameter ein. Dieser Befehl bietet innerhalb der Transaktion eine Ansicht der Daten. dir m* -useTransaction Das Ergebnis zeigt, dass bei ausgeführtem Commit für die Transaktion der Schlüssel "MyCompany" dem Schlüssel "MyKey" hinzugefügt wird. Struktur: HKEY_CURRENT_USER\Software SKC VC Name Property --- -- ---- -------- 83 1 Microsoft {(default)} 0 1 MyCompany {MyKey} BEISPIEL 4: KOMBINIEREN VON BEFEHLEN, DIE TEIL BZW. NICHT TEIL VON TRANSAKTIONEN SIND Sie können während einer Transaktion Befehle eingeben, die nicht Teil einer Transaktion sind. Die Befehle, die nicht Teil von Transaktionen sind, wirken sich sofort auf die Daten, auf die Transaktion jedoch überhaupt nicht aus. Im folgenden Befehl wird eine Transaktion im Registrierungsschlüss el "HKCU:\Software" gestartet. start-transaction In den nächsten drei Befehlen werden mit dem Cmdlet "New-Item" Schlüssel zur Registrierung hinzugefügt. Im ersten und dritten Befehl wird der UseTransaction-Parameter verwendet, um Befehle in die Transaktion einzuschließen. Im zweiten Befehl ist der Parameter ausgelassen. Da der zweite Befehl nicht Teil der Transaktion enthalten ist, wird er sofort wirksam. new-item MyCompany1 -UseTransaction new-item MyCompany2 new-item MyCompany3 -UseTransaction Wenn Sie den aktuellen Status der Registrierung anzeigen möchten, verwenden Sie den Befehl "Get-ChildItem" ("dir") ohne den UseTransaction-Parameter. Mit diesem Befehl werden Elemente abgerufen, die mit "M" beginnen. dir m* Das Ergebnis zeigt, dass der Schlüssel "MyCompany2" der Registrierung hinzugefügt wird, aber die Schlüssel "MyCompany1" und "MyCompany3", die Teil der Transaktion sind, nicht hinzugefügt werden. Struktur: 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 aus. complete-transaction Nun werden die Schlüssel, die als Teil der Transaktion hinzugefügt wurden, in der Registrierung angezeigt. dir m* Struktur: HKEY_CURRENT_USER\Software SKC VC Name Property --- -- ---- -------- 83 1 Microsoft {(default)} 0 0 MyCompany1 {} 0 0 MyCompany2 {} 0 0 MyCompany3 {} BEISPIEL 5: VERWENDEN DER AUTOMATISCHEN ZURÜCKSETZUNG Wenn ein Befehl in einer Transaktion einen Fehler beliebiger Art generiert, wird die Transaktion automatisch zurückgesetzt. Dieses Standardverhalten wurde für Skripts entworfen, mit denen Transaktionen ausgeführt werden. Skripts wurden in der Regel umfangreich getestet und enthalten eine Fehlerbehandlungslogik, daher werden keine Fehler erwartet, und die Transaktion sollte normal beendet werden. Im ersten Befehl wird eine Transaktion im Registrierungsschlüssel "HKCU:\Software" gestartet. start-transaction Im folgenden Befehl wird der Registrierungsschlüssel "MyCompany" mit dem Cmdlet "New-Item" der Registrierung hinzugefügt. In dem Befehl wird mit dem UseTransaction-Parameter (Alias: "usetx") der Befehl in die Transaktion eingeschlossen. New-Item MyCompany -UseTX Da der Schlüssel "MyCompany" bereits in der Registrierung ist, kommt es zu einem Fehler beim Befehl, und die Transaktion wird zurückgesetzt. New-Item: Ein Schlüssel unter diesem Pfad ist bereits Bei Zeile:1 Zeichen:9 vorhanden + new-item <<<< MyCompany -usetx Mit dem Befehl "Get-Transaction" wird überprüft, ob die Transaktion zurückgesetzt wurde und SubscriberCount auf 0 festgelegt ist. RollbackPreference SubscriberCount Status ------------------ --------------- ------ Error 0 RolledBack BEISPIEL 6: ÄNDERN DER EINSTELLUNG FÜR DIE ZURÜCKSETZUNG Wenn die Transaktion stärker fehlertolerant sein soll, können Sie die Einstellung über den RollbackPreference-Parameter von Start-Transaction ändern. Mit dem folgenden Befehl wird eine Transaktion mit der Zurücksetzungseinstellung "Never" gestartet. start-transaction -rollbackpreference Never Wenn bei dem Befehl ein Fehler auftritt, wird in diesem Fall die Transaktion nicht automatisch zurückgesetzt. New-Item MyCompany -UseTX New-Item: Ein Schlüssel unter diesem Pfad ist bereits Bei Zeile:1 Zeichen:9 vorhanden + new-item <<<< MyCompany -usetx Da die Transaktion noch immer 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 direkt Skripts für Microsoft .NET Framework-Objekte erstellen, die für Transaktionen aktiviert sind. Use-Transaction akzeptiert Skriptblöcke, die nur Befehle und Ausdrücke enthalten dürfen, die für Transaktionen aktivierte .NET Framework-Objekte verwenden, z. B. Instanzen der Microsoft.PowerShell.Commands.Management.TransactedString-Klasse. Mit dem folgenden Befehl wird eine Transaktion gestartet. 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.Tran sactedString Im folgenden Befehl wird mit der Append-Methode des TransactedString-Objekts Text zur Zeichenfolge hinzugefügt. Da der Befehl nicht Teil der Transaktion ist, wird die Änderung sofort wirksam. $t.append("Windows") Mit dem folgenden Befehl wird die gleiche Append-Methode verwendet, um Text hinzuzufügen, jedoch wird der Text als Teil der Transaktion hinzugefügt. Der Befehl wird in geschweifte Klammern eingeschlossen und als Wert des ScriptBlock-Parameters von Use-Transaction festgelegt. Der UseTransaction-Parameter (UseTx) ist erforderlich. use-transaction {$t.append(" PowerShell")} -usetx Um den aktuellen Inhalt der in die Transaktion eingefügten Zeichenfolge in "$t" anzuzeigen, verwenden Sie die ToString-Method e des TransactedString-Objekts. $t.tostring() Die Ausgabe zeigt, dass nur die Änderungen wirksam wurden, die nicht Teil der Transaktion sind. Windows Wenn Sie den aktuellen Inhalt der in die Transaktion eingefügten Zeichenfolge in "$t" innerhalb der Transaktion anzeigen möchten, betten Sie den Ausdruck in den Befehl "Use-Transaction" ein. use-transaction {$s.tostring()} -usetx Die Ausgabe zeigt die Transaktionsansicht. Windows PowerShell Der folgende Befehl führt einen Commit für die Transaktion aus. complete-transaction So zeigen Sie die endgültige Zeichenfolge 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, wird von Windows PowerShell standardmäßig keine zweite Transaktion gestartet. Stattdessen wird der aktuellen Transaktion ein Abonnent hinzugefügt. Dieses Beispiel veranschaulicht das Anzeigen und Verwalten einer Transaktion mit mehreren Abonnenten. Beginnen Sie, indem Sie eine Transaktion im Schlüssel "HKCU:\Software" starten. start-transaction Mit dem folgenden Befehl rufen Sie mit dem Cmdlet "Get-Transaction " die aktive Transaktion ab. get-transaction Das Ergebnis zeigt das Objekt, das die aktive Transaktion darstellt. RollbackPreference SubscriberCount Status ------------------ --------------- ------ Error 1 Active Mit dem folgenden Befehl fügen Sie den Schlüssel "MyCompany" der Registrierung hinzu. In dem Befehl wird mit dem UseTransaction-Parameter der Befehl in die Transaktion eingeschlossen. new-item MyCompany -UseTransaction Der folgende Befehl startet mit dem Befehl "Start-Transaction" eine Transaktion. Zwar wird dieser Befehl an der Eingabeaufforderu ng eingegeben, doch tritt dieses Szenario mit höherer Wahrscheinlichkeit ein, wenn Sie ein Skript mit einer Transaktion ausführen. start-transaction Der Befehl "Get-Transaction" zeigt, dass die Abonnentenanzahl im Transaktionsobjekt erhöht wurde. Der Wert ist nun 2. RollbackPreference SubscriberCount Status ------------------ --------------- ------ Error 2 Active Im nächsten Befehl wird der Registrierungsschlüssel "MyKey" mit dem Cmdlet "New-ItemProperty" dem Schlüssel "MyCompany" hinzugefügt. Mit dem UseTransaction-Parameter wird der Befehl in die Transaktion eingeschlossen. new-itemproperty -path MyCompany -name MyKey -UseTransaction Der Schlüssel "MyCompany" ist in der Registrierung nicht vorhanden, doch wird dieser Befehl erfolgreich ausgeführt, da die beiden Befehle Teil derselben Transaktion sind. Der folgende Befehl führt einen Commit für die Transaktion aus. Wenn die Transaktion zurückgesetzt wurde, wird die Transaktion für alle Abonnenten zurückgesetzt. complete-transaction Der Befehl "Get-Transaction" zeigt, dass die Abonnentenanzahl im Transaktionsobjekt 1 ist, aber der Wert von "Status" dennoch auf "Active" (nicht "Committed") festgelegt ist. RollbackPreference SubscriberCount Status ------------------ --------------- ------ Error 1 Active Wenn Sie den Commit für die Transaktion beenden möchten, geben Sie den Befehl "Complete-Transaction" ein zweites Mal ein. Wenn ein Commit für eine Transaktion mit mehreren Abonnenten ausgeführt werden soll, müssen Sie den Befehl "Complete-Transactio n" für jeden Start-Transaction-Befehl eingeben. complete-transaction Ein weiterer Befehl Get-Transaction zeigt, dass für die Transaktion ein Commit ausgeführt wurde. RollbackPreference SubscriberCount Status ------------------ --------------- ------ Error 0 Committed BEISPIEL 8: VERWALTEN UNABHÄNGIGER TRANSAKTIONEN Wenn Sie eine Transaktion starten, während eine andere Transaktion ausgeführt wird, können Sie die neue Transaktion mithilfe des Independent-Parameters von Start-Transaction als von der ursprünglichen Transaktion unabhängig festlegen. In diesem Fall erstellt Start-Transaction ein neues Transaktionsobjekt und legt die neue Transaktion als aktiv fest. Beginnen Sie, indem Sie eine Transaktion im Schlüssel "HKCU:\Software" starten. start-transaction Mit dem folgenden Befehl rufen Sie mit dem Cmdlet "Get-Transaction " die aktive Transaktion ab. 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. Mit dem UseTransaction-Parameter (UseTx) wird der Befehl in die aktive Transaktion eingeschlossen. new-item MyCompany -use Mit dem folgenden Befehl wird eine neue Transaktion gestartet. Im Befehl wird mit dem Independent-Parameter angegeben, 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. Mit dem Befehl "Get-Transaction" können Sie die aktive Transaktion abrufen. get-transaction SubscriberCount ist für die Transaktion 1, d. h., es sind keine weiteren Abonnenten vorhanden, und es handelt sich um eine neue Transaktion. RollbackPreference SubscriberCount Status ------------------ --------------- ------ Error 1 Active Sie können die ursprüngliche Transaktion erst verwalten, wenn die neue Transaktion beendet wurde (durch Commit oder Zurücksetzen). Mit dem folgenden Befehl fügen Sie den Schlüssel "MyOtherCompany" der Registrierung hinzu. Mit dem UseTransaction-Parameter (UseTx) wird der Befehl in die aktive Transaktion eingeschlossen. new-item MyOtherCompany -usetx Setzen Sie die Transaktion nun zurück. Bei einer einzelnen Transaktion mit zwei Abonnenten wird beim Zurücksetzen der Transaktion die gesamte Transaktion für alle Abonnenten zurückgesetzt. Da diese Transaktionen jedoch unabhängig sind, werden beim Zurücksetzen der letzten Transaktion die Änderungen an der Registrierung verworfen, und die ursprüngliche Transaktion wird aktiv. undo-transaction Mit dem Befehl "Get-Transaction" wird überprüft, ob die ursprüngliche Transaktion in der Sitzung immer noch aktiv ist. get-transaction RollbackPreference SubscriberCount Status ------------------ --------------- ------ Error 1 Active Der folgende Befehl führt einen Commit für die aktive Transaktion aus. complete-transaction Mit dem Befehl Get-ChildItem wird angezeigt, dass die Registrierung geändert wurde. dir m* Struktur: 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