Delen via


Start-Transaction

Hiermee wordt een transactie gestart.

Syntaxis

Start-Transaction
     [-Timeout <Int32>]
     [-Independent]
     [-RollbackPreference <RollbackSeverity>]
     [-WhatIf]
     [-Confirm]
     [<CommonParameters>]

Description

Met de cmdlet Start-Transaction wordt een transactie gestart. Dit is een reeks opdrachten die als een eenheid worden beheerd. Een transactie kan worden voltooid of doorgevoerd. Het kan ook volledig ongedaan worden gemaakt of teruggedraaid, zodat alle gegevens die door de transactie zijn gewijzigd, worden teruggezet naar de oorspronkelijke staat. Omdat de opdrachten in een transactie worden beheerd als een eenheid, worden alle opdrachten doorgevoerd of worden alle opdrachten teruggedraaid.

Als een opdracht in de transactie standaard een fout genereert, worden transacties automatisch teruggedraaid. U kunt de parameter RollbackPreference gebruiken om dit gedrag te wijzigen.

De cmdlets die in een transactie worden gebruikt, moeten zijn ontworpen om transacties te ondersteunen. Cmdlets die transacties ondersteunen, hebben een parameter UseTransaction. Voor het uitvoeren van transacties in een provider moet de provider transacties ondersteunen. De Windows PowerShell-registerprovider in Windows Vista en latere versies van het Windows-besturingssysteem ondersteunt transacties. U kunt ook de klasse Microsoft.PowerShell.Commands.Management.TransactedString gebruiken om expressies op te nemen in transacties op elke versie van het Windows-systeem die Ondersteuning biedt voor Windows PowerShell. Andere Windows PowerShell-providers kunnen ook transacties ondersteunen.

Er kan slechts één transactie tegelijk actief zijn. Als u een nieuwe, onafhankelijke transactie start terwijl een transactie wordt uitgevoerd, wordt de nieuwe transactie de actieve transactie en moet u de nieuwe transactie doorvoeren of terugdraaien voordat u wijzigingen aanbrengt in de oorspronkelijke transactie.

cmdlet Start-Transaction is een van een set cmdlets die ondersteuning bieden voor de transactiefunctie in Windows PowerShell. Zie about_Transactions voor meer informatie.

Voorbeelden

Voorbeeld 1: Een transactie starten en terugdraaien

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

Met deze opdrachten wordt een transactie gestart en vervolgens teruggedraaid. Omdat de transactie wordt teruggedraaid, worden er geen wijzigingen aangebracht in het register.

Voorbeeld 2: Een transactie starten en voltooien

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

Met deze opdrachten wordt een transactie gestart en vervolgens voltooid. Er worden geen wijzigingen aangebracht in het register totdat de opdracht Complete Transaction wordt gebruikt.

Voorbeeld 3: Verschillende voorkeuren voor terugdraaien gebruiken

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 dit voorbeeld ziet u het effect van het wijzigen van de parameterwaarde RollbackPreference.

In de eerste set opdrachten gebruikt Start-TransactionRollbackPreferenceniet. Als gevolg hiervan wordt de standaardwaarde (Fout) gebruikt. Wanneer er een fout optreedt in een transactieopdracht, dat wil gezegd, bestaat het opgegeven pad niet, wordt de transactie automatisch teruggedraaid.

In de tweede set opdrachten gebruikt Start-TransactionRollbackPreference met de waarde Never. Als er een fout optreedt in een transactieopdracht, is de transactie nog steeds actief en kan de transactie worden voltooid.

Omdat de meeste transacties zonder fouten moeten worden uitgevoerd, heeft de standaardwaarde van RollbackPreference doorgaans de voorkeur.

Voorbeeld 4: Gebruik deze cmdlet terwijl er een transactie wordt uitgevoerd

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

In dit voorbeeld ziet u het effect van het gebruik van Start-Transaction terwijl een transactie wordt uitgevoerd. Het effect is vergelijkbaar met het samenvoegen van de transactie die wordt uitgevoerd.

Hoewel dit een vereenvoudigde opdracht is, treedt dit scenario vaak op wanneer de transactie een script uitvoert dat een volledige transactie bevat.

De eerste opdracht Start-Transaction start de transactie. De eerste opdracht New-Item maakt deel uit van de transactie.

De tweede opdracht Start-Transaction voegt een nieuwe abonnee toe aan de transactie. De opdracht Get-Transaction retourneert nu een transactie met het aantal abonnees van 2. De tweede opdracht New-Item maakt deel uit van dezelfde transactie.

Er worden geen wijzigingen aangebracht in het register totdat de hele transactie is voltooid. Als u de transactie wilt voltooien, moet u twee opdrachten voor volledige transactie invoeren, één voor elke abonnee. Als u de transactie op enig moment terugdraait, wordt alle transactie teruggedraaid voor beide abonnees.

Voorbeeld 5: Een onafhankelijke transactie starten terwijl er een wordt uitgevoerd

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}

In dit voorbeeld ziet u het effect van het gebruik van de parameter Independent van Start-Transaction om een transactie te starten terwijl er een andere transactie wordt uitgevoerd. In dit geval wordt de nieuwe transactie teruggedraaid zonder dat dit van invloed is op de oorspronkelijke transactie.

Hoewel de transacties logisch onafhankelijk zijn, omdat slechts één transactie tegelijk actief kan zijn, moet u de nieuwste transactie terugdraaien of doorvoeren voordat u de oorspronkelijke transactie hervat.

De eerste set opdrachten start een transactie. De opdracht New-Item maakt deel uit van de eerste transactie.

In de tweede set opdrachten gebruikt de opdracht Start-Transaction de parameter Independent. De opdracht Get-Transaction die volgt toont het transactieobject voor de actieve transactie. Dit is de nieuwste. Het aantal abonnees is gelijk aan 1, dat aangeeft dat de transacties niet zijn gerelateerd.

Wanneer de actieve transactie wordt teruggedraaid met behulp van een opdracht Ongedaan maken van transactie, wordt de oorspronkelijke transactie opnieuw actief.

De opdracht New-ItemProperty, die deel uitmaakt van de oorspronkelijke transactie, zonder fouten wordt voltooid en de oorspronkelijke transactie kan worden voltooid met behulp van de opdracht Complete-Transaction. Als gevolg hiervan wordt het register gewijzigd.

Voorbeeld 6: Opdrachten uitvoeren die geen deel uitmaken van een transactie

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 dit voorbeeld ziet u dat opdrachten die worden verzonden terwijl een transactie wordt uitgevoerd, kunnen worden opgenomen in de transactie of niet. Alleen opdrachten die gebruikmaken van de parameter UseTransaction maken deel uit van de transactie.

De opdrachten voor het eerste en derde New-Item gebruiken de parameter UseTransaction. Deze opdrachten maken deel uit van de transactie. Omdat de tweede opdracht New-Item de parameter UseTransaction niet gebruikt, maakt deze geen deel uit van de transactie.

De eerste dir-opdracht toont het effect. De tweede opdracht New-Item is onmiddellijk voltooid, maar de eerste en derde opdrachten nieuw item zijn pas van kracht nadat de transactie is doorgevoerd.

Met de opdracht Complete Transaction wordt de transactie doorgevoerd. Als gevolg hiervan geeft de tweede dir-opdracht aan dat alle nieuwe items worden toegevoegd aan het register.

Voorbeeld 7: Een transactie terugdraaien die niet binnen een opgegeven tijd eindigt

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

Met deze opdracht wordt de time-outparameter van Start-Transaction gebruikt om een transactie te starten die binnen twee minuten moet worden voltooid. Als de transactie niet is voltooid wanneer de time-out verloopt, wordt deze automatisch teruggedraaid.

Wanneer de time-out verloopt, ontvangt u geen melding, maar de eigenschap Status van het transactieobject is ingesteld op RolledBack en opdrachten die gebruikmaken van de parameter UseTransaction.

Parameters

-Confirm

U wordt gevraagd om bevestiging voordat u de cmdlet uitvoert.

Type:SwitchParameter
Aliassen:cf
Position:Named
Default value:False
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-Independent

Geeft aan dat deze cmdlet een transactie start die onafhankelijk is van transacties die worden uitgevoerd. Als u Start-Transaction gebruikt terwijl een andere transactie wordt uitgevoerd, wordt er standaard een nieuwe abonnee toegevoegd aan de transactie die wordt uitgevoerd. Deze parameter heeft alleen effect wanneer er al een transactie wordt uitgevoerd in de sessie.

Als u Start-Transaction gebruikt terwijl een transactie wordt uitgevoerd, wordt het bestaande transactieobject opnieuw gebruikt en wordt het aantal abonnees verhoogd. Het effect is vergelijkbaar met het samenvoegen van de oorspronkelijke transactie. Met een Undo-Transaction opdracht wordt de hele transactie teruggedraaid. Als u de transactie wilt voltooien, moet u een Complete-Transaction opdracht invoeren voor elke abonnee. Omdat de meeste transacties die tegelijkertijd worden uitgevoerd, gerelateerd zijn, is de standaardwaarde voldoende voor de meeste toepassingen.

Als u de parameter Independent opgeeft, maakt deze cmdlet een nieuwe transactie die kan worden voltooid of ongedaan kan worden gemaakt zonder dat dit van invloed is op de oorspronkelijke transactie. Omdat er echter slechts één transactie tegelijk actief kan zijn, moet u de nieuwe transactie voltooien of terugdraaien voordat u de oorspronkelijke transactie hervat.

Type:SwitchParameter
Position:Named
Default value:None
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-RollbackPreference

Hiermee geeft u de voorwaarden op waaronder een transactie automatisch wordt teruggedraaid. De acceptabele waarden voor deze parameter zijn:

  • Fout. De transactie wordt automatisch teruggedraaid als er een afsluitfout of een niet-afsluitfout optreedt.
  • TerminatingError. De transactie wordt automatisch teruggedraaid als er een afsluitfout optreedt.
  • Nooit. De transactie wordt nooit automatisch teruggedraaid.

De standaardwaarde is Fout.

Type:RollbackSeverity
Geaccepteerde waarden:Error, TerminatingError, Never
Position:Named
Default value:None
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-Timeout

Hiermee geeft u de maximale tijd, in minuten, op dat de transactie actief is. Wanneer de time-out verloopt, wordt de transactie automatisch teruggedraaid.

Er is standaard geen time-out voor transacties die op de opdrachtregel worden gestart. Wanneer transacties worden gestart door een script, is de standaardtime-out 30 minuten.

Type:Int32
Aliassen:TimeoutMins
Position:Named
Default value:None
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

-WhatIf

Toont wat er zou gebeuren als de cmdlet wordt uitgevoerd. De cmdlet wordt niet uitgevoerd.

Type:SwitchParameter
Aliassen:wi
Position:Named
Default value:False
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:False

Invoerwaarden

None

U kunt invoer voor deze cmdlet niet doorsluisen.

Uitvoerwaarden

None

Met deze cmdlet wordt geen uitvoer gegenereerd.