Start-Transaction
Startet eine Transaktion.
Syntax
Start-Transaction
[-Timeout <Int32>]
[-Independent]
[-RollbackPreference <RollbackSeverity>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Beschreibung
Das Cmdlet Start-Transaction
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, werden entweder alle Befehle zugesichert, 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 parameter RollbackPreference verwenden, um dieses Verhalten zu ändern.
Die in einer Transaktion verwendeten Cmdlets müssen so konzipiert sein, dass Transaktionen unterstützt werden. Cmdlets, die Transaktionen unterstützen, weisen einen UseTransaction Parameter auf. Um Transaktionen in einem Anbieter auszuführen, 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 transaktionen auch 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
Diese Befehle starten und führen dann ein Rollback einer Transaktion durch. Da die Transaktion zurückgesetzt wird, werden keine Änderungen an 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
Diese Befehle starten und schließen dann eine Transaktion ab. Es werden keine Änderungen an der Registrierung vorgenommen, bis der Befehl Complete-Transaction
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 verwendet Start-Transaction
nicht RollbackPreference-. 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 verwendet Start-Transaction
RollbackPreference- mit dem Wert "Never". Wenn in einem Transaktionsbefehl ein Fehler auftritt, ist die Transaktion weiterhin aktiv und kann erfolgreich abgeschlossen werden.
Da die meisten Transaktionen ohne Fehler ausgeführt werden müssen, wird in der Regel der Standardwert RollbackPreference 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 Auswirkung der Verwendung von Start-Transaction
gezeigt, während eine Transaktion ausgeführt wird.
Der Effekt ähnelt dem Beitritt zur laufenden 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.
Der zweite Start-Transaction
Befehl fügt der Transaktion einen neuen Abonnenten hinzu. Der Befehl Get-Transaction
gibt jetzt 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 für jeden Abonnenten zwei Complete-Transaction
Befehle eingeben. 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 Independent-Parameters von Start-Transaction
, um eine Transaktion zu starten, während eine andere Transaktion ausgeführt wird.
In diesem Fall wird die neue Transaktion zurückgesetzt, ohne dass sich die ursprüngliche Transaktion auswirkt.
Obwohl die Transaktionen logisch unabhängig sind, da jeweils nur eine Transaktion aktiv sein kann, müssen Sie einen Rollback durchführen oder die neueste Transaktion ausführen, bevor Sie die Ursprüngliche Transaktion fortsetzen.
Die erste Gruppe von Befehlen startet eine Transaktion.
Der Befehl New-Item
ist Teil der ersten Transaktion.
Im zweiten Satz von Befehlen verwendet der Start-Transaction
Befehl den Parameter Independent.
Der folgende Befehl Get-Transaction
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 befehl New-ItemProperty
, der Teil der ursprünglichen Transaktion ist, endet ohne Fehler, und die ursprüngliche Transaktion kann mit dem Befehl Complete-Transaction
abgeschlossen werden.
Daher wird die Registrierung 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 übermittelt werden, während eine Transaktion ausgeführt wird, in die Transaktion einbezogen oder nicht einbezogen werden können. Nur Befehle, die den parameter UseTransaction verwenden, sind Teil der Transaktion.
Die befehle first and third New-Item
use the UseTransaction parameter. Diese Befehle sind Teil der Transaktion. Da der zweite New-Item
-Befehl nicht den parameter UseTransaction verwendet, ist er nicht Teil der Transaktion.
Der erste befehl Get-ChildItem 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 befehl Complete-Transaction
commits the transaction. 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 von 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 und Befehle festgelegt, die den UseTransaction Parameter verwenden.
Parameter
-Confirm
Fordert Sie vor dem Ausführen des Cmdlets zur Bestätigung auf.
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 Start-Transaction
verwenden, während eine andere Transaktion ausgeführt wird, wird der aktuellen Transaktion standardmäßig ein neuer Abonnent hinzugefügt. Dieser Parameter hat nur dann Auswirkungen, wenn eine Transaktion bereits in der Sitzung ausgeführt wird.
Wenn Sie Start-Transaction
verwenden, während eine Transaktion ausgeführt wird, wird das vorhandene Transaktionsobjekt wiederverwendet, und die Anzahl der Abonnenten wird erhöht. Der Effekt ähnelt dem Beitritt zur 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 verknüpft sind, reicht der Standardwert für die meisten Verwendungen aus.
Wenn Sie den Parameter Independent angeben, erstellt dieses Cmdlet eine neue Transaktion, die abgeschlossen oder rückgängig gemacht werden kann, ohne dass sich die ursprüngliche Transaktion auswirkt. Da jedoch jeweils nur eine Transaktion aktiv sein kann, müssen Sie die neue Transaktion abschließen oder zurücksetzen, bevor Sie die Arbeit an der ursprünglichen Transaktion fortsetzen.
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. Die zulässigen Werte für diesen Parameter sind:
-
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 an der Befehlszeile gestartet werden. Wenn Transaktionen von einem Skript gestartet werden, beträgt das Standardtimeout 30 Minuten.
Typ: | Int32 |
Aliase: | TimeoutMins |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-WhatIf
Zeigt, was passiert, 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
Sie können keine Eingabe an dieses Cmdlet weiterleiten.
Ausgaben
None
Dieses Cmdlet generiert keine Ausgabe.