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 sitt ursprungliga tillstånd. Eftersom kommandona i en transaktion hanteras som en enhet checkas alla kommandon in eller så återställs alla kommandon.

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

De cmdletar 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 leverantören ha stöd för transaktioner. Providern Windows PowerShell Registry 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 alla versioner 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.

Start-Transactioncmdlet ä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

Set-Location hkcu:\software
Start-Transaction
New-Item "ContosoCompany" -UseTransaction
New-ItemProperty "ContosoCompany" -Name "MyKey" -Value 123 -UseTransaction
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

Set-Location hkcu:\software
Start-Transaction
New-Item "ContosoCompany" -UseTransaction
New-ItemProperty "ContosoCompany" -Name "MyKey" -Value 123 -UseTransaction
Complete-Transaction

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

Exempel 3: Använd olika inställningar för återställning

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

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

I den första uppsättningen kommandon Start-Transaction använder 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 Start-Transaction använder RollbackPreference 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

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

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 omfattar att köra ett skript som innehåller en fullständig transaktion.

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

Det andra Start-Transaction kommandot lägger till en ny prenumerant i transaktionen. Kommandot Get-Transaction returnerar nu en transaktion med antalet prenumeranter på 2. Det andra New-Item kommandot 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

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}

Det här exemplet visar effekten av att använda den oberoende parametern Start-Transaction för 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 checka in den senaste transaktionen innan du återupptar arbetet med den ursprungliga transaktionen.

Den första uppsättningen kommandon startar en transaktion. Kommandot New-Item är en del av den första transaktionen.

I den andra uppsättningen kommandon Start-Transaction använder kommandot parametern Independent . Följande Get-Transaction kommando 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 ett Undo-Transaction kommando 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 Complete-Transaction av kommandot . Därför ändras registret.

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

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

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 ingår i transaktionen. Eftersom det andra New-Item kommandot inte använder parametern UseTransaction är det inte en del av transaktionen.

Det första kommandot Get-ChildItem visar effekten. Det andra New-Item kommandot 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 kommandot Get-ChildItem att alla nya objekt läggs till i registret.

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

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

Det här kommandot använder timeout-parameternStart-Transaction för för att starta en transaktion som måste slutföras inom två minuter. Om transaktionen inte slutförs när tidsgränsen går ut å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
Accept pipeline input:False
Accept wildcard characters:False

-Independent

Anger att denna cmdlet 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 parametern Independent 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 i taget 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
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:

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

Standardvärdet är Error.

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

-Timeout

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

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

Type:Int32
Aliases:TimeoutMins
Position:Named
Default value:None
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
Accept pipeline input:False
Accept wildcard characters:False

Indata

None

Du kan inte skicka indata till denna cmdlet.

Utdata

None

Denna cmdlet genererar inga utdata.