Sdílet prostřednictvím


Start-Transaction

Spustí transakci.

Syntaxe

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

Description

Rutina Start-Transaction spustí transakci, což je řada příkazů spravovaných 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. Můžete také použít Microsoft.PowerShell.Commands.Management.TransactedString třídy 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.

rutina Start-Transaction 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

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

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

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

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

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

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

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

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

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í příkaz New-Item je součástí transakce.

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

Do dokončení celé transakce se v registru neprovedou žádné změny. Chcete-li dokončit transakci, 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

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}

Tento příklad ukazuje účinek použití nezávislý parametr Start-Transaction ke 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ů používá příkaz Start-Transaction parametr Independent. Příkaz Get-Transaction, který následuje, zobrazuje objekt transakce pro aktivní transakci, což je nejnovější. Počet odběratelů se rovná 1, který ukazuje, že transakce nesouvisejí.

Pokud je aktivní transakce vrácena zpět pomocí Zpět-Transaction příkaz, původní transakce se znovu aktivuje.

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

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

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

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í příkazy New-Item používají parametr UseTransaction. Tyto příkazy jsou součástí transakce. Vzhledem k tomu, že druhý příkaz New-Item nepoužívá parametr UseTransaction, není součástí transakce.

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

Příkaz Complete-Transaction potvrdí transakci. V důsledku toho druhý příkaz dir 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

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

Tento příkaz používá parametr TimeoutStart-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 Stav 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 vás vyzve k potvrzení.

Typ:SwitchParameter
Aliasy:cf
Position:Named
Default value:False
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky: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.

Pokud ve výchozím nastavení používáte Start-Transaction zatímco transakce probíhá, 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 parametr Independent, tato rutina vytvoří novou transakci, která se dá dokončit nebo vrátit zpět, aniž by to ovlivnilo původní transakci. 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.

Typ:SwitchParameter
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-RollbackPreference

Určuje podmínky, za kterých se transakce automaticky vrátí zpět. Přijatelné hodnoty pro tento parametr jsou:

  • Chyba. Transakce se vrátí zpět automaticky, pokud dojde k ukončovací nebo neukončující chybě.
  • Ukončování chyby. Transakce se vrátí zpět automaticky, pokud dojde k ukončovací chybě.
  • Nikdy. Transakce se nikdy nevrátí zpět automaticky.

Výchozí hodnota je Error.

Typ:RollbackSeverity
Přípustné hodnoty:Error, TerminatingError, Never
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky: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.

Typ:Int32
Aliasy:TimeoutMins
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-WhatIf

Ukazuje, co se stane, když se rutina spustí. Rutina se nespustí.

Typ:SwitchParameter
Aliasy:wi
Position:Named
Default value:False
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

Vstupy

None

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

Výstupy

None

Tato rutina negeneruje žádný výstup.