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.