Start-Transaction
Startet eine Transaktion.
Syntax
Default (Standard)
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.
Das Cmdlet Start-Transaction gehört zu einer Reihe von 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
PS C:\> cd hkcu:\software
PS HKCU:\software> Start-Transaction
PS HKCU:\software> New-Item "ContosoCompany" -UseTransaction
PS HKCU:\software> New-ItemProperty "ContosoCompany" -Name "MyKey" -Value 123 -UseTransaction
PS HKCU:\software> 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
PS C:\> cd hkcu:\software
PS HKCU:\software> Start-Transaction
PS HKCU:\software> New-Item "ContosoCompany" -UseTransaction
PS HKCU:\software> New-ItemProperty "ContosoCompany" -Name "MyKey" -Value 123 -UseTransaction
PS HKCU:\software> 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
PS C:\> cd HKCU:\software
PS HKCU:\software> Start-Transaction
PS HKCU:\software> New-Item -Path "NoPath" -Name "ContosoCompany" -UseTransaction
PS HKCU:\software> New-Item -Path . -Name "ContosoCompany" -UseTransaction
PS HKCU:\software> Start-Transaction -RollbackPreference never
PS HKCU:\software> New-Item -Path "NoPath" -Name "ContosoCompany" -UseTransaction
PS HKCU:\software> New-Item -Path . -Name "ContosoCompany" -UseTransaction
# Start-Transaction (-rollbackpreference error)
PS HKCU:\software> Start-Transaction
PS HKCU:\software> 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
PS HKCU:\software> 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)
PS HKCU:\software> Start-Transaction -RollbackPreference never
PS HKCU:\software> 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
PS HKCU:\software> New-Item -Path . -Name "ContosoCompany" -UseTransaction
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 0 ContosoCompany {}
PS HKCU:\Software> Complete-Transaction
# Succeeds
In diesem Beispiel wird die Auswirkung des Änderns des RollbackPreference Parameterwerts veranschaulicht.
In der ersten Gruppe von Befehlen verwendet Start-TransactionRollbackPreference nicht. 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-TransactionRollbackPreference 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.
PS C:\> cd HKCU:\software
PS HKCU:\software> Start-Transaction
PS HKCU:\software> New-Item "ContosoCompany" -UseTransaction
PS HKCU:\software> Start-Transaction
PS HKCU:\software> Get-Transaction
PS HKCU:\software> New-Item "ContosoCompany2" -UseTransaction
PS HKCU:\software> Complete-Transaction
PS HKCU:\software> Complete-Transaction
PS HKCU:\Software> Get-Transaction
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 2 Active
Dieses Beispiel zeigt, wie sich die Verwendung von Start-Transaction auswirkt, 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 einer Abonnentenanzahl von 2 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, einen 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
PS C:\> cd HKCU:\software
PS HKCU:\software> Start-Transaction
PS HKCU:\software> New-Item "ContosoCompany" -UseTransaction
PS HKCU:\software> Start-Transaction -Independent
PS HKCU:\software> Get-Transaction
PS HKCU:\software> Undo-Transaction
PS HKCU:\software> New-ItemProperty -Path "ContosoCompany" -Name "MyKey" -Value 123 -UseTransaction
PS HKCU:\software> Complete-Transaction
PS HKCU:\software> dir contoso*
PS HKCU:\Software> Get-Transaction
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 1 Active
PS HKCU:\software> Undo-Transaction
PS HKCU:\software> New-ItemProperty -Path "ContosoCompany" -Name "MyKey" -Value 123 -UseTransaction
MyKey
-----
123
PS HKCU:\software> Complete-Transaction
PS HKCU:\software> dir contoso*
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 1 MyCompany {MyKey}
Dieses Beispiel zeigt, wie sich die Verwendung des Independent-Parameters von Start-Transaction auswirkt, 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.
In der zweiten Gruppe von Befehlen verwendet der Befehl Start-Transaction den Parameter Independent . Der folgende Befehl Get-Transaction zeigt das Transaktionsobjekt für die aktive Transaktion an, bei der es sich um die neueste Transaktion handelt. Die Anzahl der Abonnenten ist gleich 1, die anzeigt, dass die Transaktionen nicht verknüpft sind.
Wenn für die aktive Transaktion ein Rollback ausgeführt wird, indem ein Rückgängig-Transaktionsbefehl ausgeführt 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. Daher wird die Registrierung geändert.
Beispiel 6: Ausführen von Befehlen, die nicht Teil einer Transaktion sind
PS C:\> cd hkcu:\software
PS HKCU:\software> Start-Transaction
PS HKCU:\software> New-Item "ContosoCompany1" -UseTransaction
PS HKCU:\software> New-Item "ContosoCompany2"
PS HKCU:\software> New-Item "ContosoCompany3" -UseTransaction
PS HKCU:\software> dir contoso*
PS HKCU:\software> Complete-Transaction
PS HKCU:\software> dir contoso*
PS HKCU:\Software> dir contoso*
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 0 ContosoCompany2 {}
PS HKCU:\Software> Complete-Transaction
PS HKCU:\Software> dir 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.
Der erste und 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 nicht Teil der Transaktion.
Der erste dir-Befehl zeigt den Effekt an. Der zweite New-Item-Befehl wird sofort abgeschlossen, aber der erste und dritte New-Item-Befehl werden erst wirksam, wenn für die Transaktion ein Commit ausgeführt wird.
Mit dem Befehl Complete-Transaction wird ein Commit für die Transaktion ausgeführt. Als Ergebnis zeigt der zweite dir-Befehl an, dass alle neuen Elemente der Registrierung hinzugefügt wurden.
Beispiel 7: Zurücksetzen einer Transaktion, die nicht in einer bestimmten Zeit abgeschlossen ist
PS C:\> Start-Transaction -Timeout 2
# Wait two minutes...
PS C:\> Get-Transaction
PS C:\> New-Item HKCU:\Software\ContosoCompany -UseTransaction
PS C:\> Start-Transaction -Timeout 2
# Wait two minutes...
PS C:\> > Get-Transaction
RollbackPreference SubscriberCount Status
------------------ --------------- -----------
Error 1 RolledBack
PS C:\> 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 sein 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 zur Bestätigung auf, bevor Sie das Cmdlet ausführen.
Parametereigenschaften
| Typ: | SwitchParameter |
| Standardwert: | False |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
| Aliase: | vgl |
Parametersätze
(All)
| Position: | Named |
| Obligatorisch: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | 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 laufenden 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 standardmäßig 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 macht die gesamte Transaktion rückgängig. 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.
Parametereigenschaften
| Typ: | SwitchParameter |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
(All)
| Position: | Named |
| Obligatorisch: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
-RollbackPreference
Gibt die Bedingungen an, unter denen eine Transaktion automatisch zurückgesetzt wird. Die zulässigen Werte für diesen Parameter sind:
- Fehler. Für die Transaktion wird automatisch ein Rollback ausgeführt, wenn ein abbrechender oder nicht abbrechender Fehler auftritt.
- TerminatingError. Für die Transaktion wird automatisch ein Rollback ausgeführt, wenn ein Beendigungsfehler auftritt.
- „Nie“ festgelegt ist. Die Transaktion wird nie automatisch zurückgesetzt.
Der Standardwert ist Error.
Parametereigenschaften
| Typ: | RollbackSeverity |
| Standardwert: | None |
| Zulässige Werte: | Error, TerminatingError, Never |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
Parametersätze
(All)
| Position: | Named |
| Obligatorisch: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | 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.
Parametereigenschaften
| Typ: | Int32 |
| Standardwert: | None |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
| Aliase: | TimeoutMins |
Parametersätze
(All)
| Position: | Named |
| Obligatorisch: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
-WhatIf
Zeigt, was passiert, wenn das Cmdlet ausgeführt wird. Das Cmdlet wird nicht ausgeführt.
Parametereigenschaften
| Typ: | SwitchParameter |
| Standardwert: | False |
| Unterstützt Platzhalter: | False |
| Nicht anzeigen: | False |
| Aliase: | Wi |
Parametersätze
(All)
| Position: | Named |
| Obligatorisch: | False |
| Wert aus Pipeline: | False |
| Wert aus Pipeline nach dem Eigenschaftsnamen: | False |
| Wert aus verbleibenden Argumenten: | False |
CommonParameters
Dieses Cmdlet unterstützt die allgemeinen Parameter -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction und -WarningVariable. Weitere Informationen findest du unter about_CommonParameters.
Eingaben
None
Eingaben können nicht an dieses Cmdlet weitergereicht werden.
Ausgaben
None
Dieses Cmdlet generiert keine Ausgabe.