Startet eine Transaktion.
Syntax
Start-Transaction [-Independent] [-RollbackPreference {<Error> | <TerminatingError> | <Never>}] [-Timeout <int>] [-Bestätigung] [-WhatIf] [<CommonParameters>]
Beschreibung
Das Cmdlet "Start-Transaction" startet eine Transaktion. Dabei handelt es sich um eine Reihe von Befehlen, die als Einheit verwaltet werden. Eine Transaktion kann abgeschlossen ("ein Commit ausgeführt") werden oder vollkommen rückgängig gemacht ("zurückgesetzt") werden, sodass alle von der Transaktion geänderten Daten im ursprünglichen Zustand wiederhergestellt 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.
Standardmäßig wird automatisch ein Rollback von Transaktionen ausgeführt, wenn ein Befehl in der Transaktion einen Fehler generiert. Sie können dieses Verhalten jedoch mit dem RollbackPreference-Parameter ändern.
Die in einer Transaktion verwendeten Cmdlets müssen zum Unterstützen von Transaktionen geeignet sein. Cmdlets, die Transaktionen unterstützen, verfügen über einen UseTransaction-Parameter. Damit Transaktionen in einem Anbieter ausgeführt werden können, muss der Anbieter Transaktionen unterstützen. Der Windows PowerShell-Registry-Anbieter in Windows Vista und höheren Versionen von Windows unterstützt Transaktionen. Sie können auch mit der Microsoft.PowerShell.Commands.Management.TransactedString-Klasse Ausdrücke in Transaktionen unter beliebigen Windows-Versionen einschließen, die Windows PowerShell unterstützen. Andere Windows PowerShell-Anbieter können ebenfalls Transaktionen unterstützen.
Es kann jeweils nur eine Transaktion aktiv sein. Wenn Sie eine neue, unabhängige Transaktion starten, während eine Transaktion ausgeführt wird (weder abgeschlossen noch rückgängig gemacht), wird die neue Transaktion zur aktiven Transaktion, und Sie müssen ein Commit für die neue Transaktion ausführen bzw. sie zurücksetzen, bevor Sie Änderungen an der ursprünglichen Transaktion vornehmen.
Das Cmdlet "Start-Transaction" gehört zu einem Satz von Cmdlets, die das Transaktionsfeature in Windows PowerShell unterstützen. Weitere Informationen finden Sie unter "about_Transactions".
Parameter
-Independent
Startet eine Transaktion, die von allen aktuellen Transaktionen unabhängig ist. Wenn Sie Start-Transaction verwenden, während eine andere Transaktion ausgeführt wird, wird der ausgeführten Transaktion standardmäßig ein neuer Abonnent hinzugefügt. Dieser Parameter hat nur Auswirkungen, wenn bereits eine Transaktion in der Sitzung ausgeführt wird.
Wenn Sie Start-Transaction verwenden, während eine Transaktion ausgeführt wird, wird das vorhandene Transaktionsobjekt standardmäßig wiederverwendet, und die Abonnentenanzahl wird inkrementiert. Dies entspricht weitgehend dem Hinzufügen der ursprünglichen Transaktion. Mit dem Befehl "Undo-Transaction" wird die gesamte Transaktion zurückgesetzt. Zum Abschließen der Transaktion müssen Sie den Befehl "Complete-Transaction" für jeden Abonnenten eingeben. Da die meisten Transaktionen, die gleichzeitig ausgeführt werden, miteinander in Zusammenhang stehen, ist der Standardwert in den meisten Fällen ausreichend.
Wenn Sie den Independent-Parameter verwenden, wird eine neue Transaktion erstellt, die ohne Auswirkungen auf die ursprüngliche Transaktion abgeschlossen oder rückgängig gemacht werden kann. Da jedoch nur jeweils eine Transaktion aktiv sein kann, müssen Sie die neue Transaktion abschließen oder zurücksetzen, bevor Sie mit der ursprünglichen Transaktion weiterarbeiten.
Erforderlich? |
false |
Position? |
named |
Standardwert |
Reuse the original transaction object. |
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-RollbackPreference <RollbackSeverity>
Gibt die Bedingungen an, unter denen eine Transaktion automatisch zurückgesetzt wird. Der Standardwert ist "Error".
Gültige Werte:
– Error: Die Transaktion wird automatisch zurückgesetzt, wenn ein Fehler mit oder ohne Abbruch auftritt. Der Standardwert ist "Error".
– Terminating error: Die Transaktion wird automatisch zurückgesetzt, wenn ein Fehler mit Abbruch auftritt.
– Never: Die Transaktion nie wird automatisch zurückgesetzt.
Erforderlich? |
false |
Position? |
named |
Standardwert |
Error |
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-Timeout <int>
Gibt die maximale Zeit in Minuten an, die die Transaktion aktiv ist. Wenn das Timeout abläuft, wird die Transaktion automatisch zurückgesetzt.
Standardmäßig gibt es kein Timeout für Transaktionen, die über die Befehlszeile gestartet wurden. Wenn Transaktionen von einem Skript gestartet werden, beträgt der Standardtimeoutwert 30 Minuten.
Erforderlich? |
false |
Position? |
named |
Standardwert |
No timeout (infinite) |
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-Bestätigung
Fordert Sie vor der Ausführung des Befehls zur Bestätigung auf.
Erforderlich? |
false |
Position? |
named |
Standardwert |
|
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-WhatIf
Beschreibt die Auswirkungen einer Ausführung des Befehls, ohne den Befehl tatsächlich auszuführen.
Erforderlich? |
false |
Position? |
named |
Standardwert |
|
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
<CommonParameters>
Dieses Cmdlet unterstützt die folgenden allgemeinen Parameter: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer und -OutVariable. Weitere Informationen finden Sie unter about_Commonparameters.
Eingaben und Ausgaben
Der Eingabetyp ist der Typ der Objekte, die über die Pipeline an das Cmdlet übergeben werden können. Der Rückgabetyp ist der Typ der Objekte, die das Cmdlet zurückgibt.
Eingaben |
None Eingaben können nicht über die Pipeline an dieses Cmdlet übergeben werden. |
Ausgaben |
None Dieses Cmdlet generiert keine Ausgabe. |
Beispiel 1
C:\PS>cd hkcu:\software PS HKCU:\software> start-transaction PS HKCU:\software> new-item MyCompany -UseTransaction PS HKCU:\software> new-itemproperty MyCompany -name MyKey -value 123 -UseTransaction PS HKCU:\software> undo-transaction Beschreibung ----------- Mit diesen Befehlen wird eine Transaktion gestartet und dann zurückgesetzt. Da die Transaktion zurückgesetzt wird, werden keine Änderungen in der Registrierung vorgenommen.
Beispiel 2
C:\PS>cd hkcu:\software PS HKCU:\software> start-transaction PS HKCU:\software> new-item MyCompany -UseTransaction PS HKCU:\software> new-itemproperty MyCompany -name MyKey -value 123 -UseTransaction PS HKCU:\software> complete-transaction Beschreibung ----------- Mit diesen Befehlen wird eine Transaktion gestartet und dann abgeschlossen. Es werden erst dann Änderungen an der Registrierung vorgenommen, wenn der Befehl "Complete-Transaction" verwendet wird.
Beispiel 3
C:\PS>cd HKCU:\software PS HKCU:\software> start-transaction PS HKCU:\software> new-item -path NoPath -name MyCompany -UseTransaction PS HKCU:\software> new-item -path . -name MyCompany -UseTransaction PS HKCU:\software> start-transaction -RollbackPreference never PS HKCU:\software> new-item -path NoPath -name MyCompany -UseTransaction PS HKCU:\software> new-item -path . -name MyCompany -UseTransaction # Start-Transaction (-rollbackpreference error) PS HKCU:\software> start-transaction PS HKCU:\software> new-item -path NoPath -Name MyCompany -UseTransaction New-Item : The registry key at the specified path does not exist. At line:1 char:9 + new-item <<<< -path NoPath -Name MyCompany -UseTransaction PS HKCU:\software> new-item -path . -name MyCompany -UseTransaction New-Item : Cannot use transaction. The transaction has been rolled back or has timed out. At line:1 char:9 + new-item <<<< -path . -name MyCompany -UseTransaction # Start-Transaction (-rollbackpreference never) PS HKCU:\software> start-transaction -RollbackPreference never PS HKCU:\software> new-item -path NoPath -name MyCompany -UseTransaction New-Item : The registry key at the specified path does not exist. At line:1 char:9 + new-item <<<< -path NoPath -name MyCompany -UseTransaction PS HKCU:\software> new-item -path . -name MyCompany -UseTransaction Hive: HKEY_CURRENT_USER\Software SKC VC Name Property --- -- ---- -------- 0 0 MyCompany {} PS HKCU:\Software> complete-transaction # Succeeds Beschreibung ----------- In diesem Beispiel werden die Auswirkungen der Verwendung des RollbackPreference-Parameterwerts veranschaulicht. Im ersten Befehlssatz verwendet der Befehl "Start-Transaction" den RollbackPreference-Parameter nicht. Daher wird der Standardwert ("Error") verwendet. Wenn ein Fehler in einem Transaktionsbefehl auftritt (der angegebene Pfad ist nicht vorhanden), wird die Transaktion automatisch zurückgesetzt. Im zweiten Satz von Befehlen verwendet der Befehl "Start-Transaction" den RollbackPreference-Parameter mit dem Wert "Never". Wenn ein Fehler in einem Transaktionsbefehl auftritt, ist die Transaktion daher weiterhin aktiv und kann erfolgreich abgeschlossen werden. Da die meisten Transaktionen ohne Fehler ausgeführt werden müssen, wird normalerweise der Standardwert des RollbackPreference-Parameters bevorzugt.
Beispiel 4
C:\PS>cd HKCU:\software PS HKCU:\software> start-transaction PS HKCU:\software> new-item MyCompany -UseTransaction PS HKCU:\software> start-transaction PS HKCU:\software> get-transaction PS HKCU:\software> new-item MyCompany2 -UseTransaction PS HKCU:\software> complete-transaction PS HKCU:\software> complete-transaction PS HKCU:\Software> Get-Transaction RollbackPreference SubscriberCount Status ------------------ --------------- ------ Error 2 Active Beschreibung ----------- In diesem Beispiel werden die Auswirkungen veranschaulicht, wenn der Befehl "Start-Transaction" verwendet wird, während eine Transaktion ausgeführt wird. Dies entspricht weitgehend dem Hinzufügen der ausgeführten Transaktion. Obwohl es sich hierbei um einen vereinfachten Befehl handelt, tritt dieses Szenario im Allgemeinen auf, wenn für die Transaktion ein Skript ausgeführt werden muss, das eine vollständige Transaktion enthält. Der erste Befehl "Start-Transaction" startet die Transaktion. Der erste Befehl "New-Item" ist ein Teil der Transaktion. Der zweite Befehl "Start-Transaction" fügt der Transaktion einen neuen Abonnenten hinzu. Der Befehl "Get-Transaction" gibt nun eine Transaktion mit der Abonnentenanzahl 2 zurück. Der zweite Befehl "New-Item" ist Teil der gleichen Transaktion. Änderungen an der Registrierung werden erst dann vorgenommen, wenn die gesamte Transaktion abgeschlossen wurde. Zum Abschließen der Transaktion müssen Sie zwei Complete-Transaction-Befehle eingeben, einen für jeden Abonnenten. Wenn Sie einen Rollback für die Transaktion ausführen würden, würde ein Rollback der gesamten Transaktion für beide Abonnenten ausgeführt.
Beispiel 5
C:\PS>cd HKCU:\software PS HKCU:\software> start-transaction PS HKCU:\software> new-item MyCompany -UseTransaction PS HKCU:\software> start-transaction -independent PS HKCU:\software> get-transaction PS HKCU:\software> undo-transaction PS HKCU:\software> new-itemproperty -path MyCompany -name MyKey -value 123 -UseTransaction PS HKCU:\software> complete-transaction PS HKCU:\software> dir my* PS HKCU:\Software> get-transaction RollbackPreference SubscriberCount Status ------------------ --------------- ------ Error 1 Active PS HKCU:\software> undo-transaction PS HKCU:\software> new-itemproperty -path MyCompany -name MyKey -value 123 -UseTransaction MyKey ----- 123 PS HKCU:\software> complete-transaction PS HKCU:\software> dir my* Hive: HKEY_CURRENT_USER\Software SKC VC Name Property --- -- ---- -------- 0 1 MyCompany {MyKey} Beschreibung ----------- In diesem Beispiel werden die Auswirkungen veranschaulicht, wenn mit dem Independent-Parameter von Start-Transaction eine Transaktion gestartet wird, während eine andere Transaktion ausgeführt wird. In diesem Fall wird die neue Transaktion zurückgesetzt, ohne dass dies Auswirkungen auf die ursprüngliche Transaktion hat. Obwohl die Transaktionen logisch unabhängig sind, da jeweils nur eine Transaktion aktiv sein kann, müssen Sie die neueste Transaktion zurücksetzen oder einen Commit ausführen, bevor Sie weiter mit der ursprünglichen Transaktion arbeiten können. Mit dem ersten Satz von Befehlen wird eine Transaktion gestartet. Der Befehl "New-Item" ist ein Teil der ersten Transaktion. Im zweiten Satz von Befehlen verwendet der Befehl "Start-Transaction" den Independent-Parameter. Der folgende Befehl "Get-Transaction" zeigt das Transaktionsobjekt für die aktive Transaktion an (die neueste Transaktion). Die Abonnentenanzahl beträgt 1. Dies gibt an, dass die Transaktionen nicht verknüpft sind. Wenn die aktive Transaktion mit dem Befehl "Undo-Transaction" zurückgesetzt wird, wird die ursprüngliche Transaktion wieder aktiv. Der Befehl "New-ItemProperty", der Teil der ursprünglichen Transaktion ist, wird ohne Fehler abgeschlossen, und die ursprüngliche Transaktion kann mit dem Befehl "Complete-Transaction" abgeschlossen werden. Die Registrierung wird daraufhin geändert.
Beispiel 6
C:\PS>cd hkcu:\software PS HKCU:\software> start-transaction PS HKCU:\software> new-item MyCompany1 -UseTransaction PS HKCU:\software> new-item MyCompany2 PS HKCU:\software> new-item MyCompany3 -UseTransaction PS HKCU:\software> dir my* PS HKCU:\software> complete-transaction PS HKCU:\software> dir my* PS HKCU:\Software> dir my* Hive: HKEY_CURRENT_USER\Software SKC VC Name Property --- -- ---- -------- 0 0 MyCompany2 {} PS HKCU:\Software> complete-transaction PS HKCU:\Software> dir my* Hive: HKEY_CURRENT_USER\Software SKC VC Name Property --- -- ---- -------- 0 0 MyCompany1 {} 0 0 MyCompany2 {} 0 0 MyCompany3 {} Beschreibung ----------- In diesem Beispiel wird veranschaulicht, dass Befehle, die gesendet werden, während eine Transaktion ausgeführt wird, in der Transaktion eingeschlossen oder nicht eingeschlossen werden können. Nur Befehle, die den UseTransaction-Parameter verwenden, sind Teil der Transaktion. Der erste und der dritte New-Item-Befehl verwenden den UseTransaction-Parameter. Diese Befehle sind Teil der Transaktion. Da der zweite New-Item-Befehl den UseTransaction-Parameter nicht verwendet, ist er kein Teil der Transaktion. Der erste Befehl "dir" zeigt die Auswirkungen an. Der zweite Befehl "New-Item" wird sofort abgeschlossen, der erste und der dritte New-Item-Befehl werden jedoch erst wirksam, nachdem ein Commit für die Transaktion ausgeführt wurde. Der Befehl "Complete-Transaction" führt einen Commit für die Transaktion aus. Der zweite dir-Befehl gibt daher an, dass der Registrierung alle neuen Elemente hinzugefügt werden.
Beispiel 7
C:\PS>start-transaction -timeout 2 # Wait two minutes... C:\PS> get-transaction C:\PS> new-item HKCU:\Software\MyCompany -UseTransaction C:\PS> start-transaction -timeout 2 # Wait two minutes... C:\PS>> get-transaction RollbackPreference SubscriberCount Status ------------------ --------------- ----------- Error 1 RolledBack C:\PS> new-item HKCU:\Software\MyCompany -UseTransaction New-Item : Cannot use transaction. The transaction has been rolled back or has timed out. At line:1 char:9 + new-item <<<< MyCompany -UseTransaction Beschreibung ----------- Dieser Befehl startet mithilfe des Timeout-Parameters von Start-Transaction eine Transaktion, die innerhalb von zwei Minuten abgeschlossen werden muss. Wenn die Transaktion bei Ablauf des Timeouts nicht abgeschlossen wurde, wird sie automatisch zurückgesetzt. Wenn das Timeout abläuft, werden Sie nicht benachrichtigt. Die Status-Eigenschaft des Transaktionsobjekts wird jedoch auf "RolledBack" festgelegt, und bei Befehlen, die den UseTransaction-Parameter verwenden, tritt ein Fehler auf.
Siehe auch