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