Share via


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.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters: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.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters: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.

Type:RollbackSeverity
Accepted values:Error, TerminatingError, Never
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters: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.

Type:Int32
Aliases:TimeoutMins
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

Zeigt, was geschieht, wenn das Cmdlet ausgeführt wird. Das Cmdlet wird nicht ausgeführt.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Eingaben

None

Eingaben können nicht an dieses Cmdlet weitergereicht werden.

Ausgaben

None

Dieses Cmdlet generiert keine Ausgabe.