Start-Transaction

Startar en transaktion.

Syntax

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

Description

Cmdleten Start-Transaction startar en transaktion, vilket är en serie kommandon som hanteras som en enhet. En transaktion kan slutföras eller checkas in. Alternativt kan den ångras helt eller återställas, så att alla data som ändras av transaktionen återställs till dess ursprungliga tillstånd. Eftersom kommandona i en transaktion hanteras som en enhet checkas antingen alla kommandon in eller så återställs alla kommandon.

Om något kommando i transaktionen genererar ett fel som standard återställs transaktionerna automatiskt. Du kan använda parametern RollbackPreference för att ändra det här beteendet.

Cmdletarna som används i en transaktion måste utformas för att stödja transaktioner. Cmdletar som stöder transaktioner har en UseTransaction-parameter . För att utföra transaktioner i en provider måste providern ha stöd för transaktioner. Windows PowerShell Registry-providern i Windows Vista och senare versioner av Windows-operativsystemet stöder transaktioner. Du kan också använda klassen Microsoft.PowerShell.Commands.Management.TransactedString för att inkludera uttryck i transaktioner i valfri version av Windows-systemet som stöder Windows PowerShell. Andra Windows PowerShell leverantörer kan också stödja transaktioner.

Endast en transaktion kan vara aktiv i taget. Om du startar en ny, oberoende transaktion medan en transaktion pågår, blir den nya transaktionen den aktiva transaktionen och du måste checka in eller återställa den nya transaktionen innan du gör några ändringar i den ursprungliga transaktionen.

Cmdleten Start-Transaction är en av en uppsättning cmdletar som stöder transaktionsfunktionen i Windows PowerShell. Mer information finns i about_Transactions.

Exempel

Exempel 1: Starta och återställa en 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

Dessa kommandon startar och återställer sedan en transaktion. Eftersom transaktionen återställs görs inga ändringar i registret.

Exempel 2: Starta och slutföra en 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

Dessa kommandon startar och slutför sedan en transaktion. Inga ändringar görs i registret förrän kommandot Complete-Transaction används.

Exempel 3: Använd olika återställningsinställningar

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

Det här exemplet visar effekten av att ändra parametervärdet RollbackPreference .

I den första uppsättningen kommandon använder Start-Transaction inte RollbackPreference. Därför används standardvärdet (Fel). När ett fel inträffar i ett transaktionskommando, d.v.s. att den angivna sökvägen inte finns, återställs transaktionen automatiskt.

I den andra uppsättningen kommandon använder Start-TransactionRollbackPreference med värdet Aldrig. När ett fel uppstår i ett transaktionskommando är transaktionen därför fortfarande aktiv och kan slutföras.

Eftersom de flesta transaktioner måste utföras utan fel föredras vanligtvis standardvärdet RollbackPreference .

Exempel 4: Använd den här cmdleten medan en transaktion pågår

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

Det här exemplet visar effekten av att använda Start-Transaction medan en transaktion pågår. Effekten är ungefär som att ansluta till den pågående transaktionen.

Även om det här är ett förenklat kommando inträffar det här scenariot ofta när transaktionen innebär att du kör ett skript som innehåller en fullständig transaktion.

Det första kommandot Start-Transaction startar transaktionen. Det första kommandot New-Item är en del av transaktionen.

Det andra kommandot Start-Transaction lägger till en ny prenumerant i transaktionen. Kommandot Get-Transaction returnerar nu en transaktion med ett antal prenumeranter på 2. Det andra kommandot New-Item ingår i samma transaktion.

Inga ändringar görs i registret förrän hela transaktionen har slutförts. För att slutföra transaktionen måste du ange två complete-transaction-kommandon , ett för varje prenumerant. Om du skulle återställa transaktionen när som helst, skulle alla transaktioner återställas för båda prenumeranterna.

Exempel 5: Starta en oberoende transaktion medan en pågår

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}

Det här exemplet visar effekten av att använda den oberoende parametern starttransaktion för att starta en transaktion medan en annan transaktion pågår. I det här fallet återställs den nya transaktionen utan att den ursprungliga transaktionen påverkas.

Även om transaktionerna är logiskt oberoende, eftersom endast en transaktion kan vara aktiv i taget, måste du återställa eller genomföra den senaste transaktionen innan du återupptar arbetet med den ursprungliga transaktionen.

Den första uppsättningen kommandon startar en transaktion. Kommandot Nytt objekt är en del av den första transaktionen.

I den andra uppsättningen kommandon använder kommandot Start-Transaction parametern Independent . Kommandot Get-Transaction som följer visar transaktionsobjektet för den aktiva transaktionen, som är den senaste. Antalet prenumeranter är lika med 1, vilket visar att transaktionerna inte är relaterade.

När den aktiva transaktionen återställs med hjälp av kommandot Ångra transaktion blir den ursprungliga transaktionen aktiv igen.

Kommandot New-ItemProperty , som är en del av den ursprungliga transaktionen, slutförs utan fel och den ursprungliga transaktionen kan slutföras med hjälp av kommandot Complete-Transaction . Därför ändras registret.

Exempel 6: Köra kommandon som inte ingår i en transaktion

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                     {}

Det här exemplet visar att kommandon som skickas medan en transaktion pågår kan inkluderas i transaktionen eller inte inkluderas. Endast kommandon som använder parametern UseTransaction ingår i transaktionen.

De första och tredje new-item-kommandona använder parametern UseTransaction . Dessa kommandon är en del av transaktionen. Eftersom det andra kommandot New-Item inte använder parametern UseTransaction är det inte en del av transaktionen.

Det första dir-kommandot visar effekten. Det andra kommandot New-Item slutförs omedelbart, men de första och tredje new-item-kommandona gäller inte förrän transaktionen har checkats in.

Kommandot Complete-Transaction checkar in transaktionen. Därför visar det andra dir-kommandot att alla nya objekt läggs till i registret.

Exempel 7: Återställa en transaktion som inte slutförs inom en angiven tid

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

Det här kommandot använder timeout-parameternför Start-Transaction för att starta en transaktion som måste slutföras inom två minuter. Om transaktionen inte är klar när tidsgränsen upphör att gälla återställs den automatiskt.

När tidsgränsen går ut meddelas du inte, men egenskapen Status för transaktionsobjektet är inställd på RolledBack och kommandon som använder parametern UseTransaction misslyckas.

Parametrar

-Confirm

Uppmanar dig att bekräfta innan du kör cmdleten.

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

-Independent

Anger att den här cmdleten startar en transaktion som är oberoende av pågående transaktioner. Om du använder Start-Transaction medan en annan transaktion pågår läggs som standard en ny prenumerant till i den pågående transaktionen. Den här parametern har bara en effekt när en transaktion redan pågår i sessionen.

Om du använder Start-Transaction medan en transaktion pågår återanvänds det befintliga transaktionsobjektet som standard och antalet prenumeranter ökas. Effekten är ungefär som att ansluta till den ursprungliga transaktionen. Ett Undo-Transaction-kommando återställer hela transaktionen. För att slutföra transaktionen måste du ange ett Complete-Transaction kommando för varje prenumerant. Eftersom de flesta transaktioner som pågår samtidigt är relaterade är standardvärdet tillräckligt för de flesta användningsområden.

Om du anger den oberoende parametern skapar den här cmdleten en ny transaktion som kan slutföras eller ångras utan att den ursprungliga transaktionen påverkas. Men eftersom endast en transaktion kan vara aktiv åt gången måste du slutföra eller återställa den nya transaktionen innan du återupptar arbetet med den ursprungliga transaktionen.

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

-RollbackPreference

Anger de villkor under vilka en transaktion återställs automatiskt. De acceptabla värdena för den här parametern är:

  • Fel. Transaktionen återställs automatiskt om ett avslutande eller icke-avslutande fel inträffar.
  • TerminatingError. Transaktionen återställs automatiskt om ett avslutande fel inträffar.
  • Aldrig. Transaktionen återställs aldrig automatiskt.

Standardvärdet är Fel.

Type:RollbackSeverity
Accepted values:Error, TerminatingError, Never
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Timeout

Anger den maximala tiden i minuter som transaktionen är aktiv. När tidsgränsen upphör att gälla återställs transaktionen automatiskt.

Som standard finns det ingen tidsgräns för transaktioner som startas på kommandoraden. När transaktioner startas av ett skript är standardtidsgränsen 30 minuter.

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

-WhatIf

Visar vad som skulle hända om cmdleten kördes. Cmdleten körs inte.

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

Indata

None

Du kan inte skicka indata till den här cmdleten.

Utdata

None

Den här cmdleten genererar inga utdata.