Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Kurze Beschreibung
Beschreibt, wie Transaktionen in PowerShell verwaltet werden.
Lange Beschreibung
Transaktionen werden in PowerShell ab PowerShell 2.0 unterstützt. Mit diesem Feature können Sie eine Transaktion starten, angeben, welche Befehle Teil der Transaktion sind, und ein Commit oder Rollback einer Transaktion ausführen.
In PowerShell ist eine Transaktion ein Satz von mindestens einem Befehl, der als logische Einheit verwaltet wird. Eine Transaktion kann abgeschlossen werden ("zugesichert"), wodurch die von der Transaktion betroffenen Daten geändert werden. Oder eine Transaktion kann vollständig rückgängig gemacht werden ("Rollback"), sodass die betroffenen Daten nicht von der Transaktion geändert werden.
Da die Befehle in einer Transaktion als Einheit verwaltet werden, werden entweder alle Befehle zugesichert, oder alle Befehle werden zurückgesetzt.
Transaktionen werden häufig in der Datenverarbeitung verwendet, vor allem bei Datenbankvorgängen und für Finanztransaktionen. Transaktionen werden am häufigsten verwendet, wenn im schlimmsten Fall für eine Reihe von Befehlen nicht alle fehlschlagen, aber dass einige Befehle erfolgreich sind, während andere fehlschlagen, das System in einem beschädigten, falschen oder uninterpretierbaren Zustand zurückgibt, der schwer zu reparieren ist.
Transaktions-Cmdlets
PowerShell enthält mehrere Cmdlets zum Verwalten von Transaktionen.
-
Start-Transaction
: Startet eine neue Transaktion. -
Use-Transaction
: Fügt der Transaktion einen Befehl oder Ausdruck hinzu. Der Befehl muss transaktionsfähige Objekte verwenden. -
Undo-Transaction
: Rollback der Transaktion, sodass keine Daten von der Transaktion geändert werden. -
Complete-Transaction
: Commits der Transaktion. Die von der Transaktion betroffenen Daten werden geändert. -
Get-Transaction
: Ruft Informationen zur aktiven Transaktion ab.
Geben Sie für eine Liste der Transaktions-Cmdlets Folgendes ein:
Get-Command *transaction
Ausführliche Informationen zu den Cmdlets finden Sie unter:
Get-Help Use-Transaction -Detailed
Transaktionsfähige Elemente
Um an einer Transaktion teilzunehmen, müssen sowohl das Cmdlet als auch der Anbieter Transaktionen unterstützen. Dieses Feature ist in die Objekte integriert, die von der Transaktion betroffen sind.
Der PowerShell-Registrierungsanbieter unterstützt Transaktionen in Windows. Das TransactedString-Objekt funktioniert mit jedem Betriebssystem, das PowerShell ausführt.
Andere PowerShell-Anbieter können Transaktionen unterstützen. Um die PowerShell-Anbieter in Ihrer Sitzung zu finden, die Transaktionen unterstützen, verwenden Sie den folgenden Befehl, um den Transaktionswert in der Eigenschaft "Capabilities " von Anbietern zu finden:
Get-PSProvider | Where-Object {$_.Capabilities -like "*transactions*"}
Weitere Informationen zu einem Anbieter finden Sie in der Hilfe für den Anbieter. Geben Sie Folgendes ein, um Die Hilfe zum Anbieter zu erhalten:
Get-Help <provider-name>
Wenn Sie z. B. Hilfe zum Registrierungsanbieter abrufen möchten, geben Sie Folgendes ein:
Get-Help Registry
Der UseTransaction-Parameter
Cmdlets, die Transaktionen unterstützen können, weisen einen UseTransaction-Parameter auf . Dieser Parameter enthält den Befehl in der aktiven Transaktion. Sie können den vollständigen Parameternamen oder den Alias usetx verwenden.
Der Parameter kann nur verwendet werden, wenn die Sitzung eine aktive Transaktion enthält. Wenn Sie einen Befehl mit dem UseTransaction-Parameter eingeben, wenn keine aktive Transaktion vorhanden ist, schlägt der Befehl fehl.
Um Cmdlets mit dem Parameter UseTransaction zu finden, geben Sie Folgendes ein:
Get-Help * -Parameter UseTransaction
In PowerShell Core unterstützen alle Cmdlets, die für die Arbeit mit PowerShell-Anbietern entwickelt wurden, Transaktionen. Daher können Sie die Anbieter-Cmdlets zum Verwalten von Transaktionen verwenden.
Weitere Informationen zu PowerShell-Anbietern finden Sie unter about_Providers.
Das Transaktionsobjekt
Transaktionen werden in PowerShell durch ein Transaktionsobjekt, System.Management.Automation.Transaction, dargestellt.
Das -Objekt weist die folgenden Eigenschaften auf:
RollbackPreference: Enthält die Rollbackeinstellung, die für die aktuelle Transaktion festgelegt wurde. Sie können die Rollbackeinstellung festlegen, wenn Sie
Start-Transaction
die Transaktion starten.Die Rollbackeinstellung bestimmt die Bedingungen, unter denen die Transaktion automatisch zurückgesetzt wird. Gültige Werte sind
Error
,TerminatingError
undNever
. Der Standardwert istError
.Status: Enthält den aktuellen Status der Transaktion. Gültige Werte sind
Active
,Committed
undRolledBack
.SubscriberCount: Enthält die Anzahl der Abonnenten der Transaktion. Ein Abonnent wird einer Transaktion hinzugefügt, wenn Sie eine Transaktion starten, während eine andere Transaktion ausgeführt wird. Die Anzahl der Abonnenten wird erhöht, wenn ein Abonnent die Transaktion commits.
Aktive Transaktionen
In PowerShell ist jeweils nur eine Transaktion aktiv, und Sie können nur die aktive Transaktion verwalten. Mehrere Transaktionen können gleichzeitig in derselben Sitzung ausgeführt werden, aber nur die zuletzt gestartete Transaktion ist aktiv.
Daher können Sie bei Verwendung der Transaktions-Cmdlets keine bestimmte Transaktion angeben. Befehle gelten immer für die aktive Transaktion.
Dies ist am deutlichsten im Verhalten des Get-Transaction
Cmdlets. Wenn Sie einen Get-Transaction
Befehl eingeben, Get-Transaction
ruft immer nur ein Transaktionsobjekt ab. Dieses Objekt ist das Objekt, das die aktive Transaktion darstellt.
Um eine andere Transaktion zu verwalten, müssen Sie zuerst die aktive Transaktion abschließen, entweder durch Commit oder Zurücksetzen. Wenn Sie dies tun, wird die vorherige Transaktion automatisch aktiv. Transaktionen werden in umgekehrter Reihenfolge aktiv, in der sie gestartet werden, sodass die zuletzt gestartete Transaktion immer aktiv ist.
Abonnenten und unabhängige Transaktionen
Wenn Sie eine Transaktion starten, während eine andere Transaktion ausgeführt wird, startet PowerShell standardmäßig keine neue Transaktion. Stattdessen wird der aktuellen Transaktion ein "Abonnent" hinzugefügt.
Wenn eine Transaktion über mehrere Abonnenten verfügt, führt ein einzelner Undo-Transaction
Befehl zu jedem Zeitpunkt einen Rollback der gesamten Transaktion für alle Abonnenten durch.
Um die Transaktion zu übernehmen, müssen Sie jedoch einen Complete-Transaction
Befehl für jeden Abonnenten eingeben.
Um die Anzahl der Abonnenten einer Transaktion zu finden, überprüfen Sie die SubscriberCount-Eigenschaft des Transaktionsobjekts. Der folgende Befehl verwendet beispielsweise das Get-Transaction
Cmdlet, um den Wert der SubscriberCount-Eigenschaft der aktiven Transaktion abzurufen:
(Get-Transaction).SubscriberCount
Das Hinzufügen eines Abonnenten ist das Standardverhalten, da die meisten Transaktionen, die gestartet werden, während eine andere Transaktion ausgeführt wird, mit der ursprünglichen Transaktion verknüpft sind. Im typischen Modell ruft ein Skript, das eine Transaktion enthält, ein Hilfsskript auf, das seine eigene Transaktion enthält. Da die Transaktionen miteinander verbunden sind, sollten sie als Einheit zurückgesetzt oder zugesichert werden.
Sie können jedoch eine Transaktion starten, die unabhängig von der aktuellen Transaktion ist, indem Sie den Parameter Independent des Start-Transaction
Cmdlets verwenden.
Wenn Sie eine unabhängige Transaktion starten, Start-Transaction
wird ein neues Transaktionsobjekt erstellt, und die neue Transaktion wird zur aktiven Transaktion. Die unabhängige Transaktion kann zugesichert oder zurückgesetzt werden, ohne dass sich die ursprüngliche Transaktion auswirkt.
Wenn die unabhängige Transaktion abgeschlossen ist (zugesichert oder zurückgesetzt), wird die ursprüngliche Transaktion erneut zur aktiven Transaktion.
Ändern von Daten
Wenn Sie Transaktionen zum Ändern von Daten verwenden, werden die daten, die von der Transaktion betroffen sind, erst geändert, wenn Sie die Transaktion übernehmen. Die gleichen Daten können jedoch durch Befehle geändert werden, die nicht Teil der Transaktion sind.
Beachten Sie dies, wenn Sie Transaktionen zum Verwalten freigegebener Daten verwenden. Datenbanken verfügen in der Regel über Mechanismen, mit denen die Daten gesperrt werden, während Sie daran arbeiten, und verhindern, dass andere Benutzer und andere Befehle, Skripts und Funktionen sie ändern.
Die Sperre ist jedoch ein Feature der Datenbank. Sie bezieht sich nicht auf Transaktionen. Wenn Sie in einem transaktionsfähigen Dateisystem oder einem anderen Datenspeicher arbeiten, können die Daten geändert werden, während die Transaktion ausgeführt wird.
Beispiele
Die Beispiele in diesem Abschnitt verwenden den PowerShell-Registrierungsanbieter und gehen davon aus, dass Sie damit vertraut sind. Geben Sie informationen zum Registrierungsanbieter ein Get-Help Registry
.
Beispiel 1: Commit für eine Transaktion
Verwenden Sie das Start-Transaction
Cmdlet, um eine Transaktion zu erstellen. Der folgende Befehl startet eine Transaktion mit den Standardeinstellungen.
Start-Transaction
Verwenden Sie den UseTransaction-Parameter des Cmdlets, um Befehle in die Transaktion einzuschließen. Standardmäßig sind Befehle nicht in der Transaktion enthalten,
Beispielsweise ist der folgende Befehl, der die aktuelle Position im Softwareschlüssel des HKCU:
Laufwerks festlegt, nicht in der Transaktion enthalten.
cd HKCU:\Software
Der folgende Befehl, der den MyCompany-Schlüssel erstellt, verwendet den UseTransaction-Parameter des New-Item
Cmdlets, um den Befehl in die aktive Transaktion einzuschließen.
New-Item MyCompany -UseTransaction
Der Befehl gibt ein Objekt zurück, das den neuen Schlüssel darstellt, aber da der Befehl Teil der Transaktion ist, wird die Registrierung noch nicht geändert.
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 0 MyCompany {}
Verwenden Sie das Complete-Transaction
Cmdlet, um die Transaktion zu übernehmen. Da sie sich immer auf die aktive Transaktion auswirkt, können Sie die Transaktion nicht angeben.
Complete-Transaction
Daher wird der MyCompany
Schlüssel der Registrierung hinzugefügt.
dir m*
Hive: HKEY_CURRENT_USER\software
SKC VC Name Property
--- -- ---- --------
83 1 Microsoft {(default)}
0 0 MyCompany {}
Beispiel 2: Zurücksetzen einer Transaktion
Verwenden Sie das Start-Transaction
Cmdlet, um eine Transaktion zu erstellen. Der folgende Befehl startet eine Transaktion mit den Standardeinstellungen.
Start-Transaction
Der folgende Befehl, der den Schlüssel MyOtherCompany erstellt, verwendet den UseTransaction-Parameter des New-Item
Cmdlets, um den Befehl in die aktive Transaktion einzuschließen.
New-Item MyOtherCompany -UseTransaction
Der Befehl gibt ein Objekt zurück, das den neuen Schlüssel darstellt, aber da der Befehl Teil der Transaktion ist, wird die Registrierung noch nicht geändert.
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 0 MyOtherCompany {}
Verwenden Sie zum Zurücksetzen der Transaktion das Undo-Transaction
Cmdlet. Da sie sich immer auf die aktive Transaktion auswirkt, geben Sie die Transaktion nicht an.
Undo-Transaction
Das Ergebnis ist, dass der MyOtherCompany
Schlüssel nicht zur Registrierung hinzugefügt wird.
dir m*
Hive: HKEY_CURRENT_USER\software
SKC VC Name Property
--- -- ---- --------
83 1 Microsoft {(default)}
0 0 MyCompany {}
Beispiel 3: Anzeigen einer Vorschau einer Transaktion
In der Regel werden die befehle, die in einer Transaktionsänderungsdaten verwendet werden. Die Befehle zum Abrufen von Daten sind jedoch auch in einer Transaktion nützlich, da sie Daten innerhalb der Transaktion abrufen. Dies bietet eine Vorschau der Änderungen, die das Commit der Transaktion verursachen würde.
Das folgende Beispiel zeigt, wie Sie den Get-ChildItem
Befehl (der Alias ist dir
) verwenden, um eine Vorschau der Änderungen in einer Transaktion anzuzeigen.
Der folgende Befehl startet eine Transaktion.
Start-Transaction
Der folgende Befehl verwendet das New-ItemProperty
Cmdlet, um den MyKey
Registrierungseintrag zum Schlüssel "MyCompany" hinzuzufügen. Der Befehl verwendet den UseTransaction-Parameter, um den Befehl in die Transaktion einzuschließen.
New-ItemProperty -Path MyCompany -Name MyKey -Value 123 -UseTransaction
Der Befehl gibt ein Objekt zurück, das den neuen Registrierungseintrag darstellt, aber der Registrierungseintrag wird nicht geändert.
MyKey
-----
123
Um die Elemente abzurufen, die sich derzeit in der Registrierung befinden, verwenden Sie einen Get-ChildItem
Befehl (dir
) ohne den UseTransaction-Parameter. Der folgende Befehl ruft Elemente ab, die mit "M" beginnen.
dir m*
Das Ergebnis zeigt, dass dem MyCompany
Schlüssel noch keine Einträge hinzugefügt wurden.
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
83 1 Microsoft {(default)}
0 0 MyCompany {}
Um eine Vorschau des Commits der Transaktion anzuzeigen, geben Sie einen Get-ChildItem
(dir
) Befehl mit dem Parameter UseTransaction ein. Dieser Befehl enthält eine Ansicht der Daten aus der Transaktion.
dir m* -UseTransaction
Das Ergebnis zeigt, dass, wenn die Transaktion zugesichert wird, der MyKey
Eintrag dem MyCompany
Schlüssel hinzugefügt wird.
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
83 1 Microsoft {(default)}
0 1 MyCompany {MyKey}
Beispiel 4: Kombinieren von Transaktionen und nicht durchgeführten Befehlen
Sie können während einer Transaktion Nicht-Transaktionen-Befehle eingeben. Die Nicht-Transaktionen-Befehle wirken sich sofort auf die Daten aus, wirken sich jedoch nicht auf die Transaktion aus.
Der folgende Befehl startet eine Transaktion im HKCU:\Software
Registrierungsschlüssel.
Start-Transaction
Die nächsten drei Befehle verwenden das New-Item
Cmdlet, um der Registrierung Schlüssel hinzuzufügen.
Die ersten und dritten Befehle verwenden den UseTransaction-Parameter, um die Befehle in die Transaktion einzuschließen. Mit dem zweiten Befehl wird der Parameter weggelassen. Da der zweite Befehl nicht in der Transaktion enthalten ist, ist er sofort wirksam.
New-Item MyCompany1 -UseTransaction
New-Item MyCompany2
New-Item MyCompany3 -UseTransaction
Um den aktuellen Status der Registrierung anzuzeigen, verwenden Sie einen Get-ChildItem
(dir
) Befehl ohne den UseTransaction-Parameter. Dieser Befehl ruft Elemente ab, die mit M
.
dir m*
Das Ergebnis zeigt, dass der MyCompany2
Schlüssel zur Registrierung hinzugefügt wird, aber die MyCompany1
Schlüssel, MyCompany3
die Teil der Transaktion sind, werden nicht hinzugefügt.
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
83 1 Microsoft {(default)}
0 0 MyCompany2 {}
Der folgende Befehl führt einen Commit für die Transaktion durch.
Complete-Transaction
Nun werden die Schlüssel, die als Teil der Transaktion hinzugefügt wurden, in der Registrierung angezeigt.
dir m*
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
83 1 Microsoft {(default)}
0 0 MyCompany1 {}
0 0 MyCompany2 {}
0 0 MyCompany3 {}
Beispiel 5: Verwenden des automatischen Rollbacks
Wenn ein Befehl in einer Transaktion einen Fehler jeglicher Art generiert, wird die Transaktion automatisch zurückgesetzt.
Dieses Standardverhalten wurde für Skripts entwickelt, die Transaktionen ausführen. Skripts sind in der Regel gut getestet und enthalten Fehlerbehandlungslogik, sodass Fehler nicht erwartet werden und die Transaktion beendet werden sollen.
Der erste Befehl startet eine Transaktion im HKCU:\Software
Registrierungsschlüssel.
Start-Transaction
Der folgende Befehl verwendet das New-Item
Cmdlet, um den MyCompany
Schlüssel zur Registrierung hinzuzufügen. Der Befehl verwendet den UseTransaction-Parameter (der Alias ist usetx), um den Befehl in die Transaktion einzuschließen.
New-Item MyCompany -usetx
Da der MyCompany
Schlüssel bereits in der Registrierung vorhanden ist, schlägt der Befehl fehl, und die Transaktion wird zurückgesetzt.
New-Item : A key at this path already exists
At line:1 char:9
+ New-Item <<<< MyCompany -usetx
Ein Get-Transaction
Befehl bestätigt, dass die Transaktion zurückgesetzt wurde und dass "SubscriberCount" 0 ist.
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 0 RolledBack
Beispiel 6: Ändern der Rollbackeinstellung
Wenn die Transaktion fehlertoleranter sein soll, können Sie den RollbackPreference-ParameterStart-Transaction
verwenden, um die Einstellung zu ändern.
Der folgende Befehl startet eine Transaktion mit einer Rollbackeinstellung von Never
.
Start-Transaction -RollbackPreference Never
Wenn der Befehl fehlschlägt, wird die Transaktion in diesem Fall nicht automatisch zurückgesetzt.
New-Item MyCompany -usetx
New-Item : A key at this path already exists
At line:1 char:9
+ New-Item <<<< MyCompany -usetx
Da die Transaktion noch aktiv ist, können Sie den Befehl als Teil der Transaktion erneut übermitteln.
New-Item MyOtherCompany -usetx
Beispiel 7: Verwenden des Cmdlets Use-Transaction
Mit dem Use-Transaction
Cmdlet können Sie direkte Skripts für transaktionsfähige Microsoft .NET Framework-Objekte ausführen.
Use-Transaction
verwendet einen Skriptblock, der nur Befehle und Ausdrücke enthalten kann, die transaktionsfähige .NET Framework-Objekte verwenden, z. B. Instanzen der Microsoft.PowerShell.Commands.Management.TransactedString-Klasse .
Der folgende Befehl startet eine Transaktion.
Start-Transaction
Der folgende New-Object
Befehl erstellt eine Instanz der TransactedString-Klasse und speichert sie in der $t
Variablen.
$t = New-Object Microsoft.PowerShell.Commands.Management.TransactedString
Der folgende Befehl verwendet die Append-Methode des TransactedString-Objekts , um der Zeichenfolge Text hinzuzufügen. Da der Befehl nicht Teil der Transaktion ist, ist die Änderung sofort wirksam.
$t.Append("Windows")
Der folgende Befehl verwendet dieselbe Append-Methode, um Text hinzuzufügen, fügt aber den Text als Teil der Transaktion hinzu. Der Befehl ist in geschweifte Klammern eingeschlossen und wird als Wert des ScriptBlock-Parameters festgelegt Use-Transaction
. Der UseTransaction-Parameter (usetx) ist erforderlich.
Use-Transaction {$t.Append(" PowerShell")} -usetx
Verwenden Sie die $t
Methode des ToString
anzuzeigen.
$t.ToString()
Die Ausgabe zeigt, dass nur die nicht durchgeführten Änderungen wirksam sind.
Windows
Um den aktuellen Inhalt der transaktionenten Zeichenfolge in $t aus der Transaktion anzuzeigen, betten Sie den Ausdruck in einen Use-Transaction
Befehl ein.
Use-Transaction {$t.ToString()} -usetx
Die Ausgabe zeigt die Transaktionsansicht an.
PowerShell
Der folgende Befehl führt einen Commit für die Transaktion durch.
Complete-Transaction
So zeigen Sie die endgültige Zeichenfolge an:
$t.ToString()
PowerShell
Beispiel 8: Verwalten von Transaktionen mit mehreren Abonnenten
Wenn Sie eine Transaktion starten, während eine andere Transaktion ausgeführt wird, erstellt PowerShell standardmäßig keine zweite Transaktion. Stattdessen wird der aktuellen Transaktion ein Abonnent hinzugefügt.
In diesem Beispiel wird gezeigt, wie Sie eine Transaktion mit mehreren Abonnenten anzeigen und verwalten.
Beginnen Sie mit dem Starten einer Transaktion im HKCU:\Software
Schlüssel.
Start-Transaction
Der folgende Befehl verwendet den Get-Transaction
Befehl zum Abrufen der aktiven Transaktion.
Get-Transaction
Das Ergebnis zeigt das Objekt, das die aktive Transaktion darstellt.
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 1 Active
Mit dem folgenden Befehl wird der Registrierung der Schlüssel "MyCompany" hinzugefügt. Der Befehl verwendet den UseTransaction-Parameter, um den Befehl in die Transaktion einzuschließen.
New-Item MyCompany -UseTransaction
Der folgende Befehl verwendet den Start-Transaction
Befehl, um eine Transaktion zu starten. Obwohl dieser Befehl an der Eingabeaufforderung eingegeben wird, ist dieses Szenario wahrscheinlicher, wenn Sie ein Skript ausführen, das eine Transaktion enthält.
Start-Transaction
Ein Get-Transaction
Befehl zeigt an, dass die Anzahl der Abonnenten für das Transaktionsobjekt erhöht wird. Der Wert ist jetzt 2.
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 2 Active
Der nächste Befehl verwendet das New-ItemProperty
Cmdlet, um den Registrierungseintrag "MyKey" zum Schlüssel "MyCompany" hinzuzufügen. Er verwendet den UseTransaction-Parameter, um den Befehl in die Transaktion einzuschließen.
New-ItemProperty -Path MyCompany -Name MyKey -UseTransaction
Der Schlüssel "MyCompany" ist in der Registrierung nicht vorhanden, dieser Befehl ist jedoch erfolgreich, da die beiden Befehle Teil derselben Transaktion sind.
Der folgende Befehl führt einen Commit für die Transaktion durch. Wenn die Transaktion zurückgesetzt wurde, würde die Transaktion für alle Abonnenten zurückgesetzt.
Complete-Transaction
Ein Get-Transaction
Befehl zeigt an, dass die Abonnentenanzahl des Transaktionsobjekts 1 ist, aber der Wert von Status ist noch aktiv (nicht zugesichert).
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 1 Active
Um das Commit für die Transaktion abzuschließen, geben Sie einen zweiten Vollständigen Transaktionsbefehl ein. Um eine Transaktion mit mehreren Abonnenten zu übernehmen, müssen Sie für jeden Complete-Transaction
Befehl einen Start-Transaction
Befehl eingeben.
Complete-Transaction
Ein weiterer Get-Transaction
Befehl zeigt, dass die Transaktion zugesichert wurde.
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 0 Committed
Beispiel 9: Verwalten unabhängiger Transaktionen
Wenn Sie eine Transaktion starten, während eine andere Transaktion ausgeführt wird, können Sie den Unabhängigen Parameter Start-Transaction
verwenden, um die neue Transaktion unabhängig von der ursprünglichen Transaktion zu machen.
Wenn Sie dies tun, Start-Transaction
wird ein neues Transaktionsobjekt erstellt und die neue Transaktion zur aktiven Transaktion.
Beginnen Sie mit dem Starten einer Transaktion im HKCU:\Software
Schlüssel.
Start-Transaction
Der folgende Befehl verwendet den Get-Transaction
Befehl zum Abrufen der aktiven Transaktion.
Get-Transaction
Das Ergebnis zeigt das Objekt, das die aktive Transaktion darstellt.
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 1 Active
Mit dem folgenden Befehl wird der Registrierungsschlüssel "MyCompany" als Teil der Transaktion hinzugefügt. Er verwendet den UseTransaction-Parameter (usetx), um den Befehl in die aktive Transaktion einzuschließen.
New-Item MyCompany -use
Der folgende Befehl startet eine neue Transaktion. Der Befehl verwendet den Parameter Independent, um anzugeben, dass diese Transaktion kein Abonnent der aktiven Transaktion ist.
Start-Transaction -Independent
Wenn Sie eine unabhängige Transaktion erstellen, wird die neue Transaktion (zuletzt erstellt) zur aktiven Transaktion. Sie können einen Get-Transaction
Befehl verwenden, um die aktive Transaktion abzurufen.
Get-Transaction
Beachten Sie, dass "SubscriberCount" der Transaktion 1 ist und angibt, dass keine anderen Abonnenten vorhanden sind und dass die Transaktion neu ist.
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 1 Active
Die neue Transaktion muss abgeschlossen sein (entweder zugesichert oder zurückgesetzt), bevor Sie die ursprüngliche Transaktion verwalten können.
Mit dem folgenden Befehl wird der Registrierung der Schlüssel "MyOtherCompany" hinzugefügt. Er verwendet den UseTransaction-Parameter (usetx), um den Befehl in die aktive Transaktion einzuschließen.
New-Item MyOtherCompany -usetx
Führen Sie jetzt ein Rollback der Transaktion durch. Wenn es eine einzelne Transaktion mit zwei Abonnenten gab, würde ein Rollback der Transaktion die gesamte Transaktion für alle Abonnenten zurückgerollt.
Da diese Transaktionen jedoch unabhängig sind, bricht das Rollback der neuesten Transaktion die Registrierungsänderungen ab und führt die ursprüngliche Transaktion zur aktiven Transaktion aus.
Undo-Transaction
Ein Get-Transaction
Befehl bestätigt, dass die ursprüngliche Transaktion in der Sitzung noch aktiv ist.
Get-Transaction
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 1 Active
Mit dem folgenden Befehl wird die aktive Transaktion ausgeführt.
Complete-Transaction
Ein Get-ChildItem
Befehl zeigt, dass die Registrierung geändert wurde.
dir m*
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
83 1 Microsoft {(default)}
0 0 MyCompany {}