Start-Transaction

Spustí transakci.

Syntax

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

Description

Rutina Start-Transaction spustí transakci, což je řada příkazů, které jsou spravovány jako jednotka. Transakce může být dokončena nebo potvrzena. Alternativně může být zcela vrácena zpět nebo vrácena zpět, aby se všechna data změněná transakcí obnovila do původního stavu. Vzhledem k tomu, že příkazy v transakci se spravují jako jednotka, všechny příkazy jsou potvrzené nebo všechny příkazy se vrátí zpět.

Ve výchozím nastavení, pokud jakýkoli příkaz v transakci generuje chybu, transakce se vrátí zpět automaticky. Toto chování můžete změnit pomocí parametru RollbackPreference .

Rutiny použité v transakci musí být navržené tak, aby podporovaly transakce. Rutiny, které podporují transakce, mají parametr UseTransaction . Aby bylo možné provádět transakce v poskytovateli, musí zprostředkovatel podporovat transakce. Poskytovatel registru Windows PowerShellu ve Windows Vista a novějších verzích operačního systému Windows podporuje transakce. Pomocí třídy Microsoft.PowerShell.Commands.Management.TransactedString můžete také zahrnout výrazy do transakcí v libovolné verzi systému Windows, která podporuje Windows PowerShell. Další zprostředkovatelé Windows PowerShellu můžou také podporovat transakce.

Najednou může být aktivní pouze jedna transakce. Pokud spustíte novou nezávislou transakci, zatímco transakce probíhá, nová transakce se stane aktivní transakcí a musíte potvrdit nebo vrátit zpět novou transakci před provedením jakýchkoli změn původní transakce.

Start-Transaction Rutina je jednou ze sady rutin, které podporují funkci transakcí ve Windows PowerShellu. Další informace najdete v tématu about_Transactions.

Příklady

Příklad 1: Zahájení a vrácení transakce zpět

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

Tyto příkazy se spustí a pak vrátí transakce. Vzhledem k tomu, že transakce je vrácena zpět, nejsou provedeny žádné změny v registru.

Příklad 2: Zahájení a dokončení transakce

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

Tyto příkazy se spustí a pak dokončí transakci. Dokud se příkaz nepoužije, neprovedou se v registru Complete-Transaction žádné změny.

Příklad 3: Použití různých předvoleb vrácení zpět

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

Tento příklad ukazuje účinek změny hodnoty parametru RollbackPreference .

V první sadě příkazů Start-Transaction nepoužívá RollbackPreference. V důsledku toho se použije výchozí hodnota (Error). Pokud dojde k chybě v příkazu transakce, to znamená, že zadaná cesta neexistuje, transakce se automaticky vrátí zpět.

Ve druhé sadě příkazů Start-Transaction používá RollbackPreference s hodnotou Never. V důsledku toho, když dojde k chybě v příkazu transakce, transakce je stále aktivní a lze úspěšně dokončit.

Vzhledem k tomu, že většina transakcí musí být provedena bez chyby, je obvykle upřednostňovaná výchozí hodnota RollbackPreference .

Příklad 4: Tuto rutinu použijte, když probíhá transakce

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

Tento příklad ukazuje účinek použití Start-Transaction , zatímco transakce probíhá. Efekt je podobně jako spojení probíhající transakce.

I když se jedná o zjednodušený příkaz, tento scénář často dochází v případě, že transakce zahrnuje spuštění skriptu, který zahrnuje úplnou transakci.

První Start-Transaction příkaz spustí transakci. První New-Item příkaz je součástí transakce.

Druhý Start-Transaction příkaz přidá do transakce nový odběratel. Příkaz Get-Transaction teď vrátí transakci s počtem odběratelů 2. Druhý New-Item příkaz je součástí stejné transakce.

Do dokončení celé transakce se v registru neprovedou žádné změny. K dokončení transakce musíte zadat dva Complete-Transaction příkazy, jeden pro každého odběratele. Pokud byste chtěli vrátit transakce zpět v libovolném okamžiku, všechny transakce by se vrátily zpět pro oba předplatitele.

Příklad 5: Spuštění nezávislé transakce, zatímco probíhá jedna transakce

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}

Tento příklad ukazuje účinek použití nezávislé parametru Start-Transaction pro spuštění transakce, zatímco probíhá jiná transakce. V tomto případě se nová transakce vrátí zpět, aniž by to mělo vliv na původní transakci.

I když jsou transakce logicky nezávislé, protože pouze jedna transakce může být aktivní najednou, musíte vrátit zpět nebo potvrdit nejnovější transakce před obnovením práce na původní transakci.

První sada příkazů spustí transakci. Příkaz New-Item je součástí první transakce.

Ve druhé sadě příkazů Start-Transaction používá příkaz nezávislý parametr. Následující Get-Transaction příkaz ukazuje objekt transakce aktivní transakce, což je nejnovější. Počet odběratelů se rovná 1, který ukazuje, že transakce nesouvisejí.

Když se aktivní transakce vrátí zpět pomocí Undo-Transaction příkazu, původní transakce se znovu aktivuje.

Příkaz New-ItemProperty , který je součástí původní transakce, dokončí bez chyby a původní transakce lze dokončit pomocí Complete-Transaction příkazu. V důsledku toho se registr změní.

Příklad 6: Spuštění příkazů, které nejsou součástí transakce

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

Tento příklad ukazuje, že příkazy odeslané v době, kdy transakce probíhá, mohou být zahrnuty do transakce nebo nejsou zahrnuty. Součástí transakce jsou pouze příkazy, které používají parametr UseTransaction .

První a třetí New-Item příkazy používají parametr UseTransaction . Tyto příkazy jsou součástí transakce. Protože druhý New-Item příkaz nepoužívá Parametr UseTransaction , není součástí transakce.

První příkaz Get-ChildItem zobrazí efekt. Druhý New-Item příkaz je dokončen okamžitě, ale první a třetí New-Item příkazy nejsou účinné, dokud transakce nebude potvrzena.

Příkaz Complete-Transaction potvrdí transakci. V důsledku toho druhý příkaz Get-ChildItem ukazuje, že všechny nové položky jsou přidány do registru.

Příklad 7: Vrácení transakce, která se nedokončí v zadaném čase

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

Tento příkaz používá parametr časového limituStart-Transaction ke spuštění transakce, která musí být dokončena do dvou minut. Pokud se transakce po vypršení časového limitu nedokončí, vrátí se automaticky zpět.

Když vyprší časový limit, nebudete upozorněni, ale vlastnost Status objektu transakce je nastavena na RolledBack a příkazy, které používají UseTransaction parametr selžou.

Parametry

-Confirm

Před spuštěním rutiny zobrazí výzvu k potvrzení.

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

-Independent

Označuje, že tato rutina spustí transakci, která je nezávislá na probíhajících transakcích. Pokud ve výchozím nastavení používáte Start-Transaction , zatímco probíhá jiná transakce, přidá se do probíhající transakce nový odběratel. Tento parametr má účinek pouze v případě, že transakce již probíhá v relaci.

Ve výchozím nastavení platí, že pokud používáte Start-Transaction , když probíhá transakce, existující objekt transakce se znovu použije a počet odběratelů se zvýší. Efekt je podobně jako spojení původní transakce. Příkaz Undo-Transaction vrátí zpět celou transakci. Chcete-li dokončit transakci, musíte zadat Complete-Transaction příkaz pro každého odběratele. Vzhledem k tomu, že většina probíhajících transakcí současně souvisí, je výchozí hodnota dostatečná pro většinu použití.

Pokud zadáte independent parametr, tato rutina vytvoří novou transakci, která může být dokončena nebo vrácena zpět bez ovlivnění původní transakce. Nicméně, protože pouze jedna transakce může být aktivní najednou, musíte dokončit nebo vrátit novou transakci zpět před obnovením práce na původní transakci.

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

-RollbackPreference

Určuje podmínky, za kterých se transakce automaticky vrátí zpět. Tento parametr přijímá tyto hodnoty:

  • Error Transakce se vrátí zpět automaticky, pokud dojde k ukončovací nebo neukončující chybě.
  • TerminatingError Transakce se vrátí zpět automaticky, pokud dojde k ukončovací chybě.
  • Never Transakce se nikdy nevrátí zpět automaticky.

Výchozí hodnota je Error.

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

-Timeout

Určuje maximální dobu v minutách, po kterou je transakce aktivní. Po vypršení časového limitu se transakce automaticky vrátí zpět.

Ve výchozím nastavení neexistuje časový limit pro transakce, které jsou spuštěny na příkazovém řádku. Když skript spustí transakce, výchozí časový limit je 30 minut.

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

-WhatIf

Zobrazuje, co by se stalo při spuštění rutiny. Rutina není spuštěna.

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

Vstupy

None

Vstup do této rutiny nelze převést.

Výstupy

None

Tato rutina negeneruje žádný výstup.