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.
ÜBER TRANSAKTIONEN
In PowerShell ist eine Transaktion ein Satz von mindestens einem Befehl, der als logische Einheit verwaltet wird. Eine Transaktion kann abgeschlossen werden ("zugesichert"), wodurch die von der Transaktion betroffenen Daten geändert werden. Oder eine Transaktion kann vollständig rückgängig gemacht werden ("Rollback"), sodass die betroffenen Daten durch die Transaktion nicht verä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 das Worst-Case-Szenario für eine Reihe von Befehlen nicht darin besteht, dass sie alle fehlschlagen, sondern dass einige Befehle erfolgreich sind, während andere fehlschlagen, wodurch das System in einem beschädigten, falschen oder nicht interpretierbaren Zustand zurückbleibt, der schwer zu reparieren ist.
TRANSACTION-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: Führt ein Rollback der Transaktion durch, sodass keine Daten durch die 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 über die aktive Transaktion ab.
Geben Sie für eine Liste der Transaktions-Cmdlets Folgendes ein:
get-command *transaction
Geben Sie Folgendes ein, um ausführliche Informationen zu den Cmdlets zu erhalten:
get-help use-transaction -detailed
TRANSACTION-ENABLED ELEMENTE
Um an einer Transaktion teilzunehmen, müssen sowohl das Cmdlet als auch der Anbieter Transaktionen unterstützen. Diese Funktion ist in die Objekte integriert, die von der Transaktion betroffen sind.
Der PowerShell-Registrierungsanbieter unterstützt Transaktionen in Windows Vista. Das TransactedString-Objekt (Microsoft.PowerShell.Commands.Management.TransactedString) funktioniert mit jedem Betriebssystem, auf dem PowerShell ausgeführt wird.
Andere PowerShell-Anbieter können Transaktionen unterstützen. Um die PowerShell-Anbieter in Ihrer Sitzung zu finden, die Transaktionen unterstützen, verwenden Sie den folgenden Befehl, um den Wert "Transactions" in der Capabilities-Eigenschaft von Anbietern zu suchen:
get-psprovider | where {$_.Capabilities -like "transactions"}
Weitere Informationen zu einem Anbieter finden Sie in der Hilfe für den Anbieter. Geben Sie Folgendes ein, um die Anbieterhilfe zu erhalten:
get-help <provider-name>
Wenn Sie z. B. Hilfe zum Registrierungsanbieter abrufen möchten, geben Sie Folgendes ein:
get-help registry
DER PARAMETER USETRANSACTION
Cmdlets, die Transaktionen unterstützen können, verfügen über einen UseTransaction-Parameter. Dieser Parameter enthält den Befehl in der aktiven Transaktion. 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, obwohl keine aktive Transaktion vorhanden ist, schlägt der Befehl fehl.
Geben Sie Folgendes ein, um Cmdlets mit dem UseTransaction-Parameter zu suchen:
get-help * -parameter UseTransaction
Im PowerShell-Kern unterstützen alle Cmdlets, die für die Verwendung mit PowerShell-Anbietern entwickelt wurden, Transaktionen. Daher können Sie die Anbieter-Cmdlets zum Verwalten von Transaktionen verwenden.
Weitere Informationen zu PowerShell-Anbietern finden Sie unter about_Providers.
DAS TRANSACTION-OBJEKT
Transaktionen werden in PowerShell durch ein Transaktionsobjekt dargestellt, System.Management.Automation.Transaction.
Das -Objekt weist die folgenden Eigenschaften auf:
RollbackPreference: Enthält die Rollback-Voreinstellung, die für die aktuelle Transaktion festgelegt wurde. Sie können die Rollback-Voreinstellung festlegen, wenn Sie die Transaktion mit Start-Transaction starten.
Die Rollbackeinstellung bestimmt die Bedingungen, unter denen die Transaktion automatisch zurückgesetzt wird. Gültige Werte sind Error, TerminatingError und Never. Der Standardwert ist Error.
Status: Enthält den aktuellen Status der Transaktion. Gültige Werte sind Active, Commit und RolldBack.
SubscriberCount: Enthält die Anzahl der Abonnenten der Transaktion. Ein Abonnent wird einer Transaktion hinzugefügt, wenn Sie eine Transaktion starten, während eine andere Transaktion ausgeführt wird. Die Anzahl der Abonnenten wird erhöht, wenn ein Abonnent die Transaktion commits.
AKTIVE TRANSAKTIONEN
In PowerShell ist jeweils nur eine Transaktion aktiv, und Sie können nur die aktive Transaktion verwalten. Mehrere Transaktionen können gleichzeitig in derselben Sitzung ausgeführt werden, aber nur die zuletzt gestartete Transaktion ist aktiv.
Daher können Sie bei der Verwendung der Transaktions-Cmdlets keine bestimmte Transaktion angeben. Befehle gelten immer für die aktive Transaktion.
Dies zeigt sich am deutlichsten im Verhalten des Cmdlets Get-Transaction. Wenn Sie einen Get-Transaction Befehl eingeben, erhält Get-Transaction immer nur ein Transaktionsobjekt. 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 wurden, so dass 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, kann ein einzelner Undo-Transaction Befehl zu einem beliebigen Zeitpunkt die gesamte Transaktion für alle Abonnenten zurücksetzen. Um die Transaktion jedoch zu bestätigen, müssen Sie 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. Der folgende Befehl verwendet z. B. das Cmdlet Get-Transaction, um den Wert der SubscriberCount-Eigenschaft der aktiven Transaktion abzurufen:
(Get-Transaction).SubscriberCount
Das Hinzufügen eines Abonnenten ist das Standardverhalten, da die meisten Transaktionen, die gestartet werden, während eine andere Transaktion ausgeführt wird, mit der ursprünglichen Transaktion verknüpft sind. Im typischen Modell ruft ein Skript, das eine Transaktion enthält, ein Hilfsskript auf, das seine eigene Transaktion enthält. Da die Transaktionen miteinander verbunden sind, sollten sie als Einheit zurückgesetzt oder zugesichert werden.
Sie können jedoch eine Transaktion starten, die von der aktuellen Transaktion unabhängig ist, indem Sie den Independent-Parameter des Cmdlets Start-Transaction verwenden.
Wenn Sie eine unabhängige Transaktion starten, erstellt Start-Transaction ein neues Transaktionsobjekt, und die neue Transaktion wird zur aktiven Transaktion. Die unabhängige Transaktion kann zugesichert oder zurückgesetzt werden, ohne dass sich die ursprüngliche Transaktion auswirkt.
Wenn die unabhängige Transaktion abgeschlossen ist (zugesichert oder zurückgesetzt), wird die ursprüngliche Transaktion erneut zur aktiven Transaktion.
DATEN ÄNDERN
Wenn Sie Transaktionen verwenden, um Daten zu ändern, werden die Daten, die von der Transaktion betroffen sind, erst geändert, wenn Sie die Transaktion festschreiben. Dieselben 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 steht in keinem Zusammenhang mit 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. Um Informationen zum Registrierungsanbieter zu erhalten, geben Sie "get-help registry" ein.
BEISPIEL 1: FESTSCHREIBEN EINER TRANSAKTION
Um eine Transaktion zu erstellen, verwenden Sie das Cmdlet Start-Transaction. Der folgende Befehl startet eine Transaktion mit den Standardeinstellungen.
start-transaction
Verwenden Sie den UseTransaction-Parameter des Cmdlets, um Befehle in die Transaktion einzuschließen. Standardmäßig sind Befehle nicht in der Transaktion enthalten,
Der folgende Befehl, der den aktuellen Speicherort im Software-Schlüssel des Laufwerks HKCU: festlegt, ist z. B. nicht in der Transaktion enthalten.
cd hkcu:\Software
Der folgende Befehl, der den Schlüssel MyCompany 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, wurde die Registrierung noch nicht geändert.
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 0 MyCompany {}
Um die Transaktion zu bestätigen, verwenden Sie das Cmdlet Complete-Transaction. Da es sich immer auf die aktive Transaktion auswirkt, können Sie die Transaktion nicht angeben.
complete-transaction
Daraufhin wird der Schlüssel MyCompany 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
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 Schlüssel MyOtherCompany 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, wurde die Registrierung noch nicht geändert.
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 0 MyOtherCompany {}
Um ein Rollback für die Transaktion durchzuführen, verwenden Sie das Cmdlet Undo-Transaction. Da es sich immer auf die aktive Transaktion auswirkt, geben Sie die Transaktion nicht an.
Undo-transaction
Das Ergebnis ist, dass der Schlüssel MyOtherCompany der Registrierung nicht hinzugefügt wird.
dir m*
Hive: HKEY_CURRENT_USER\software
SKC VC Name Property
--- -- ---- --------
83 1 Microsoft {(default)}
0 0 MyCompany {}
BEISPIEL 3: 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.
Im folgenden Beispiel wird gezeigt, wie Sie den Befehl Get-ChildItem (der Alias ist "dir") verwenden, um eine Vorschau der Änderungen in einer Transaktion anzuzeigen.
Der folgende Befehl startet eine Transaktion.
start-transaction
Im folgenden Befehl wird das Cmdlet New-ItemProperty verwendet, um dem Schlüssel MyCompany den Registrierungseintrag MyKey hinzuzufügen. Der Befehl verwendet den UseTransaction-Parameter, um den Befehl in die Transaktion einzuschließen.
new-itemproperty -path MyCompany -Name MyKey -value 123 -UseTransaction
Der Befehl gibt ein Objekt zurück, das den neuen Registrierungseintrag darstellt, aber der Registrierungseintrag wird nicht geändert.
MyKey
-----
123
Verwenden Sie zum Abrufen der Elemente, die sich derzeit in der Registrierung befinden, einen Get-ChildItem Befehl ("dir") ohne den UseTransaction-Parameter. Der folgende Befehl ruft Elemente ab, die mit "M" beginnen.
dir m*
Das Ergebnis zeigt, dass dem Schlüssel MyCompany noch keine Einträge hinzugefügt wurden.
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
83 1 Microsoft {(default)}
0 0 MyCompany {}
Um eine Vorschau der Auswirkungen des Commits für die Transaktion anzuzeigen, geben Sie den Befehl Get-ChildItem ("dir") mit dem Parameter UseTransaction ein. Dieser Befehl enthält eine Ansicht der Daten aus der Transaktion.
dir m* -useTransaction
Das Ergebnis zeigt, dass, wenn für die Transaktion ein Commit ausgeführt 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 TRANSACTED- UND NON-TRANSACTED-BEFEHLEN
Sie können während einer Transaktion Nicht-Transaktionen-Befehle eingeben. Die Befehle, die keine Transaktionen ausführen, wirken sich sofort auf die Daten aus, aber nicht auf die Transaktion. Mit dem folgenden Befehl wird eine Transaktion im Registrierungsschlüssel HKCU:\Software gestartet.
start-transaction
In den nächsten drei Befehlen wird das Cmdlet New-Item verwendet, 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, 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 ("dir") Befehl 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, die Schlüssel MyCompany1 und MyCompany3, die Teil der Transaktion sind, jedoch nicht hinzugefügt werden.
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 sollte.
Mit dem ersten Befehl wird eine Transaktion im Registrierungsschlüssel HKCU:\Software gestartet.
start-transaction
Im folgenden Befehl wird das Cmdlet New-Item verwendet, um der Registrierung den Schlüssel MyCompany hinzuzufügen. Der Befehl verwendet den UseTransaction-Parameter (der Alias ist "usetx"), um den Befehl in die Transaktion einzuschließen.
New-Item MyCompany -UseTX
Da der Schlüssel MyCompany bereits in der Registrierung vorhanden ist, schlägt der Befehl fehl, und für die Transaktion wird ein Rollback 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 für die Transaktion ein Rollback ausgeführt wurde und dass SubscriberCount 0 ist.
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 0 RolledBack
BEISPIEL 6: ÄNDERN DER ROLLBACK-EINSTELLUNG
Wenn Sie möchten, dass die Transaktion fehlertoleranter ist, können Sie den RollbackPreference-Parameter von Start-Transaction verwenden, um die Einstellung zu ändern.
Der folgende Befehl startet eine Transaktion mit der Rollback-Einstellung "Nie".
start-transaction -rollbackpreference Never
In diesem Fall wird die Transaktion nicht automatisch zurückgesetzt, wenn der Befehl fehlschlägt.
New-Item MyCompany -UseTX
New-Item : A key at this path already exists
At line:1 char:9
+ new-item <<<< MyCompany -usetx
Da die Transaktion noch aktiv ist, können Sie den Befehl als Teil der Transaktion erneut übermitteln.
New-Item MyOtherCompany -UseTX
BEISPIEL 7: VERWENDEN DES CMDLETS "USE-TRANSACTION"
Mit dem Cmdlet Use-Transaction können Sie direkte Skripterstellung für transaktionsaktivierte Microsoft .NET Framework-Objekte durchführen. Use-Transaction verwendet einen Skriptblock, der nur Befehle und Ausdrücke enthalten kann, die transaktionsaktivierte .NET Framework-Objekte verwenden, z. B. Instanzen der Microsoft.PowerShell.Commands.Management.TransactedString-Klasse.
Der folgende Befehl startet eine Transaktion.
start-transaction
Mit dem folgenden New-Object Befehl wird eine Instanz der TransactedString-Klasse erstellt und in der Variablen $t gespeichert.
$t = New-Object Microsoft.PowerShell.Commands.Management.TransactedString
Im folgenden Befehl wird die Append-Methode des TransactedString-Objekts verwendet, um der Zeichenfolge Text hinzuzufügen. Da der Befehl nicht Teil der Transaktion ist, wird die Änderung sofort wirksam.
$t.append("Windows")
Der folgende Befehl verwendet dieselbe Append-Methode, um Text hinzuzufügen, fügt aber den Text als Teil der Transaktion hinzu. Der Befehl 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 transaktiven Zeichenfolge in $t anzuzeigen, verwenden Sie die ToString-Methode des TransactedString-Objekts.
$t.tostring()
Die Ausgabe zeigt, dass nur die nicht durchgeführten Änderungen wirksam sind.
Windows
Um den aktuellen Inhalt der transaktionierten Zeichenfolge in $t innerhalb der Transaktion anzuzeigen, betten Sie den Ausdruck in einen Use-Transaction Befehl ein.
use-transaction {$s.tostring()} -usetx
Die Ausgabe zeigt die Transaktionsansicht an.
PowerShell
Der folgende Befehl führt einen Commit für die Transaktion durch.
complete-transaction
So zeigen Sie die endgültige Zeichenfolge an:
$t.tostring()
PowerShell
BEISPIEL 8: VERWALTEN MULTI-SUBSCRIBER TRANSAKTIONEN
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 Schlüssel HKCU:\Software.
start-transaction
Der folgende Befehl verwendet den Befehl Get-Transaction, um die aktive Transaktion abzurufen.
get-transaction
Das Ergebnis zeigt das Objekt, das die aktive Transaktion darstellt.
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 1 Active
Mit dem folgenden Befehl wird der Registrierung der Schlüssel "MyCompany" hinzugefügt. Der Befehl verwendet den UseTransaction-Parameter, um den Befehl in die Transaktion einzuschließen.
new-item MyCompany -UseTransaction
Der folgende Befehl verwendet den Befehl Start-Transaction, 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 Abonnentenanzahl für das Transaktionsobjekt inkrementiert wird. Der Wert ist jetzt 2.
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 2 Active
Im nächsten Befehl wird das Cmdlet New-ItemProperty verwendet, um dem Schlüssel MyCompany den Registrierungseintrag MyKey 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, aber dieser Befehl ist 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 für das Transaktionsobjekt 1 ist, der Wert von Status jedoch weiterhin Aktiv (nicht Committed) ist.
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 1 Active
Um das Commit für die Transaktion abzuschließen, geben Sie einen zweiten Vollständigen Transaktionsbefehl 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 für die Transaktion ein Commit ausgeführt wurde.
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 0 Committed
BEISPIEL 9: VERWALTEN UNABHÄNGIGER TRANSAKTIONEN
Wenn Sie eine Transaktion starten, während eine andere Transaktion ausgeführt wird, können Sie den unabhängigen Parameter von Start-Transaction verwenden, um die neue Transaktion unabhängig von der ursprünglichen Transaktion zu machen.
Wenn Sie dies tun, erstellt Start-Transaction ein neues Transaktionsobjekt und macht die neue Transaktion zur aktiven Transaktion.
Beginnen Sie mit dem Starten einer Transaktion im Schlüssel HKCU:\Software.
start-transaction
Der folgende Befehl verwendet den Befehl Get-Transaction, um die aktive Transaktion abzurufen.
get-transaction
Das Ergebnis zeigt das Objekt, das die aktive Transaktion darstellt.
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 1 Active
Mit dem folgenden Befehl wird der Registrierungsschlüssel "MyCompany" als Teil der Transaktion hinzugefügt. Er verwendet den UseTransaction-Parameter (UseTx), um den Befehl in die aktive Transaktion einzuschließen.
new-item MyCompany -use
Der folgende Befehl startet eine neue Transaktion. Der Befehl verwendet den Independent-Parameter, 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 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 {}