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 genomförs antingen alla kommandon 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.

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 providern ha stöd för transaktioner. Windows PowerShell-registerprovidern 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.

Start-Transaction cmdlet ä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 återställningsinställningar

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 du 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 innebär att du kör 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 ett antal prenumeranter på 2. Det andra New-Item kommandot är en del av 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 åt gången, 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 den oberoende parametern. 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 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 är en del av 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 parametern Start-Transaction Timeout för 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 upphör att gälla 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.

Typ:SwitchParameter
Alias:cf
Position:Named
Standardvärde:False
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken: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 i taget måste du slutföra eller återställa den nya transaktionen innan du återupptar arbetet med den ursprungliga transaktionen.

Typ:SwitchParameter
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken: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.

Typ:RollbackSeverity
Godkända värden:Error, TerminatingError, Never
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-Timeout

Anger den maximala tid 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.

Typ:Int32
Alias:TimeoutMins
Position:Named
Standardvärde:None
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

-WhatIf

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

Typ:SwitchParameter
Alias:wi
Position:Named
Standardvärde:False
Obligatorisk:False
Godkänn pipeline-indata:False
Godkänn jokertecken:False

Indata

None

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

Utdata

None

Den här cmdleten genererar inga utdata.