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.