Freigeben über


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-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.

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.