Start-Transaction
Startet eine Transaktion.
Syntax
Start-Transaction
[-Timeout <Int32>]
[-Independent]
[-RollbackPreference <RollbackSeverity>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Beschreibung
Das Start-Transaction
Cmdlet startet eine Transaktion, bei der es sich um eine Reihe von Befehlen handelt, die als Einheit verwaltet werden. Eine Transaktion kann abgeschlossen oder zugesichert werden. Alternativ kann es vollständig rückgängig gemacht oder zurückgesetzt werden, sodass alle von der Transaktion geänderten Daten in den 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.
Wenn ein Beliebiger Befehl in der Transaktion einen Fehler generiert, werden Transaktionen automatisch zurückgesetzt. Sie können den RollbackPreference-Parameter verwenden, um dieses Verhalten zu ändern.
Die in einer Transaktion verwendeten Cmdlets müssen zum Unterstützen von Transaktionen geeignet sein. Cmdlets, die Transaktionen unterstützen, weisen einen UseTransaction-Parameter auf. Damit Transaktionen in einem Anbieter ausgeführt werden können, muss der Anbieter Transaktionen unterstützen. Der Windows PowerShell-Registrierungsanbieter in Windows Vista und höheren Versionen des Windows-Betriebssystems unterstützt Transaktionen. Sie können auch die Microsoft.PowerShell.Commands.Management.TransactedString-Klasse verwenden, um Ausdrücke in Transaktionen in einer beliebigen Version des Windows-Systems einzuschließen, die Windows PowerShell unterstützt. 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, wird die neue Transaktion zur aktiven Transaktion, und Sie müssen die neue Transaktion übernehmen oder zurücksetzen, bevor Sie Änderungen an der ursprünglichen Transaktion vornehmen.
Start-Transaction
cmdlet ist einer der Cmdlets, die das Transaktionsfeature in Windows PowerShell unterstützen. Weitere Informationen finden Sie unter about_Transactions.
Beispiele
Beispiel 1: Starten und Zurücksetzen einer Transaktion
Set-Location hkcu:\software
Start-Transaction
New-Item "ContosoCompany" -UseTransaction
New-ItemProperty "ContosoCompany" -Name "MyKey" -Value 123 -UseTransaction
Undo-Transaction
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: Starten und Abschließen einer Transaktion
Set-Location hkcu:\software
Start-Transaction
New-Item "ContosoCompany" -UseTransaction
New-ItemProperty "ContosoCompany" -Name "MyKey" -Value 123 -UseTransaction
Complete-Transaction
Mit diesen Befehlen wird eine Transaktion gestartet und dann abgeschlossen. Es werden keine Änderungen an der Registrierung vorgenommen, bis der Complete-Transaction
Befehl verwendet wird.
Beispiel 3: Verwenden unterschiedlicher Rollbackeinstellungen
Set-Location HKCU:\software
Start-Transaction
New-Item -Path "NoPath" -Name "ContosoCompany" -UseTransaction
New-Item -Path . -Name "ContosoCompany" -UseTransaction
Start-Transaction -RollbackPreference never
New-Item -Path "NoPath" -Name "ContosoCompany" -UseTransaction
New-Item -Path . -Name "ContosoCompany" -UseTransaction
# Start-Transaction (-rollbackpreference error)
Start-Transaction
New-Item -Path "NoPath" -Name "ContosoCompany" -UseTransaction
New-Item : The registry key at the specified path does not exist.
At line:1 char:9
+ new-item <<<< -Path NoPath -Name ContosoCompany -UseTransaction
New-Item -Path . -Name "Contoso" -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 ContosoCompany -UseTransaction
# Start-Transaction (-rollbackpreference never)
Start-Transaction -RollbackPreference never
New-Item -Path "NoPath" -Name "ContosoCompany" -UseTransaction
New-Item : The registry key at the specified path does not exist.
At line:1 char:9
+ New-Item <<<< -Path NoPath -Name "ContosoCompany" -UseTransaction
New-Item -Path . -Name "ContosoCompany" -UseTransaction
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 0 ContosoCompany {}
Complete-Transaction
# Succeeds
In diesem Beispiel wird die Auswirkung des Änderns des RollbackPreference-Parameterwerts veranschaulicht .
In der ersten Gruppe von Befehlen Start-Transaction
wird "RollbackPreference" nicht verwendet. Daher wird der Standardwert (Fehler) verwendet. Wenn in einem Transaktionsbefehl ein Fehler auftritt, d. h., der angegebene Pfad ist nicht vorhanden, wird die Transaktion automatisch zurückgesetzt.
In der zweiten Gruppe von Befehlen Start-Transaction
wird RollbackPreference mit dem Wert "Never" verwendet. 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 der Standardwert von RollbackPreference in der Regel bevorzugt.
Beispiel 4: Verwenden Sie dieses Cmdlet, während eine Transaktion ausgeführt wird.
Set-Location HKCU:\software
Start-Transaction
New-Item "ContosoCompany" -UseTransaction
Start-Transaction
Get-Transaction
New-Item "ContosoCompany2" -UseTransaction
Complete-Transaction
Complete-Transaction
Get-Transaction
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 2 Active
In diesem Beispiel wird die Wirkung der Verwendung Start-Transaction
gezeigt, während eine Transaktion ausgeführt wird.
Dies entspricht weitgehend dem Hinzufügen der ausgeführten Transaktion.
Obwohl dies ein vereinfachter Befehl ist, tritt dieses Szenario häufig auf, wenn die Transaktion ein Skript ausführt, das eine vollständige Transaktion enthält.
Der erste Start-Transaction
Befehl startet die Transaktion. Der erste New-Item
Befehl ist Teil der Transaktion.
Mit dem zweiten Start-Transaction
Befehl wird der Transaktion ein neuer Abonnent hinzugefügt. Der Get-Transaction
Befehl gibt nun eine Transaktion mit der Anzahl 2 des Abonnenten zurück. Der zweite New-Item
Befehl ist Teil derselben Transaktion.
Es werden keine Änderungen an der Registrierung vorgenommen, bis die gesamte Transaktion abgeschlossen ist. Um die Transaktion abzuschließen, müssen Sie zwei Complete-Transaction
Befehle eingeben, eine für jeden Abonnenten. Wenn Sie die Transaktion zu einem beliebigen Zeitpunkt zurücksetzen würden, würde die gesamte Transaktion für beide Abonnenten zurückgesetzt.
Beispiel 5: Starten einer unabhängigen Transaktion, während eine transaktion ausgeführt wird
Set-Location HKCU:\software
Start-Transaction
New-Item "ContosoCompany" -UseTransaction
Start-Transaction -Independent
Get-Transaction
Undo-Transaction
New-ItemProperty -Path "ContosoCompany" -Name "MyKey" -Value 123 -UseTransaction
Complete-Transaction
Get-ChildItem contoso*
Get-Transaction
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 1 Active
Undo-Transaction
New-ItemProperty -Path "ContosoCompany" -Name "MyKey" -Value 123 -UseTransaction
MyKey
-----
123
Complete-Transaction
Get-ChildItem contoso*
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 1 MyCompany {MyKey}
Dieses Beispiel zeigt die Auswirkung der Verwendung des Unabhängigen Parameters Start-Transaction
zum Starten einer Transaktion, 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 New-Item
Befehl ist Teil der ersten Transaktion.
Im zweiten Satz von Befehlen verwendet der Start-Transaction
Befehl den Parameter "Independent" .
Der Get-Transaction
folgende Befehl zeigt das Transaktionsobjekt für die aktive Transaktion an, bei dem es sich um die neueste handelt.
Die Anzahl der Abonnenten ist gleich 1, die anzeigt, dass die Transaktionen nicht verknüpft sind.
Wenn die aktive Transaktion mithilfe eines Undo-Transaction
Befehls zurückgesetzt wird, wird die ursprüngliche Transaktion wieder aktiv.
Der New-ItemProperty
Befehl, der Teil der ursprünglichen Transaktion ist, endet ohne Fehler, und die ursprüngliche Transaktion kann mit dem Complete-Transaction
Befehl abgeschlossen werden.
Die Registrierung wird daraufhin geändert.
Beispiel 6: Ausführen von Befehlen, die nicht Teil einer Transaktion sind
Set-Location hkcu:\software
Start-Transaction
New-Item "ContosoCompany1" -UseTransaction
New-Item "ContosoCompany2"
New-Item "ContosoCompany3" -UseTransaction
Get-ChildItem contoso*
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 0 ContosoCompany2 {}
Complete-Transaction
Get-ChildItem contoso*
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 0 ContosoCompany1 {}
0 0 ContosoCompany2 {}
0 0 ContosoCompany3 {}
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.
Die ersten und dritten New-Item
Befehle verwenden den UseTransaction-Parameter . Diese Befehle sind Teil der Transaktion. Da der zweite New-Item
Befehl nicht den UseTransaction-Parameter verwendet, ist er nicht Teil der Transaktion.
Der erste Get-ChildItem-Befehl zeigt den Effekt an. Der zweite New-Item
Befehl wird sofort abgeschlossen, aber die ersten und dritten New-Item
Befehle sind erst wirksam, wenn die Transaktion zugesichert wurde.
Der Complete-Transaction
Befehl führt einen Commit für die Transaktion durch. Daher zeigt der zweite Get-ChildItem-Befehl an, dass alle neuen Elemente der Registrierung hinzugefügt werden.
Beispiel 7: Zurücksetzen einer Transaktion, die nicht in einer bestimmten Zeit abgeschlossen ist
Start-Transaction -Timeout 2
# Wait two minutes...
Get-Transaction
New-Item HKCU:\Software\ContosoCompany -UseTransaction
Start-Transaction -Timeout 2
# Wait two minutes...
Get-Transaction
RollbackPreference SubscriberCount Status
------------------ --------------- -----------
Error 1 RolledBack
New-Item HKCU:\Software\ContosoCompany -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
Dieser Befehl verwendet den Timeout-Parameter , Start-Transaction
um eine Transaktion zu starten, die innerhalb von zwei Minuten abgeschlossen werden muss. Wenn die Transaktion nach Ablauf des Timeouts nicht abgeschlossen ist, wird sie automatisch zurückgesetzt.
Wenn das Timeout abläuft, werden Sie nicht benachrichtigt, aber die Status-Eigenschaft des Transaktionsobjekts ist auf "RolldBack" festgelegt, und Befehle, die den UseTransaction-Parameter verwenden, schlagen fehl.
Parameter
-Confirm
Hiermit werden Sie vor der Ausführung des Cmdlets zur Bestätigung aufgefordert.
Typ: | SwitchParameter |
Aliase: | cf |
Position: | Named |
Standardwert: | False |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-Independent
Gibt an, dass dieses Cmdlet eine Transaktion startet, die unabhängig von den ausgeführten Transaktionen ist.
Wenn Sie eine andere Transaktion verwenden Start-Transaction
, während eine andere Transaktion ausgeführt wird, wird der 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 eine Transaktion verwenden Start-Transaction
, während eine Transaktion ausgeführt wird, wird das vorhandene Transaktionsobjekt standardmäßig wiederverwendet, und die Anzahl der Abonnenten wird erhöht. Dies entspricht weitgehend dem Hinzufügen der ursprünglichen Transaktion. Ein Undo-Transaction
Befehl setzt die gesamte Transaktion zurück.
Um die Transaktion abzuschließen, müssen Sie für jeden Abonnenten einen Complete-Transaction
Befehl 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 angeben, erstellt dieses Cmdlet eine neue Transaktion, die abgeschlossen oder rückgängig gemacht werden kann, ohne dass die ursprüngliche Transaktion beeinträchtigt wird. 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.
Typ: | SwitchParameter |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-RollbackPreference
Gibt die Bedingungen an, unter denen eine Transaktion automatisch zurückgesetzt wird. Zulässige Werte für diesen Parameter:
Error
Die Transaktion wird automatisch zurückgesetzt, wenn ein beendigungs- oder nicht beendeter Fehler auftritt.TerminatingError
Die Transaktion wird automatisch zurückgesetzt, wenn ein Beendigungsfehler auftritt.Never
Die Transaktion wird nie automatisch zurückgesetzt.
Der Standardwert ist Error
.
Typ: | RollbackSeverity |
Zulässige Werte: | Error, TerminatingError, Never |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-Timeout
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.
Typ: | Int32 |
Aliase: | TimeoutMins |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-WhatIf
Zeigt, was geschieht, wenn das Cmdlet ausgeführt wird. Das Cmdlet wird nicht ausgeführt.
Typ: | SwitchParameter |
Aliase: | wi |
Position: | Named |
Standardwert: | False |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
Eingaben
None
Eingaben können nicht an dieses Cmdlet weitergereicht werden.
Ausgaben
None
Dieses Cmdlet generiert keine Ausgabe.