Запускает транзакцию.

Синтаксис

Start-Transaction [-Independent] [-RollbackPreference {<Error> | <TerminatingError> | <Never>}] [-Timeout <int>] [-Confirm] [-WhatIf] [<CommonParameters>]

Описание

Командлет Start-Transaction запускает транзакцию, т. е. последовательность команд, которыми можно управлять как единым блоком. Транзакцию можно завершить ("зафиксировать") или же полностью отменить ("откатить"), тем самым приведя все измененные транзакцией данные в их исходное состояние. Поскольку команды в транзакции рассматриваются как единый блок, либо все команды фиксируются, либо все команды откатываются.

По умолчанию, если какая-либо из команд в транзакции выдает ошибку, транзакция автоматически откатывается. Это поведение можно изменить с помощью параметра RollbackPreference.

Используемые в транзакции командлеты должны предусматривать поддержку транзакций. Командлеты, поддерживающие транзакции, имеют параметр UseTransaction. Для выполнения транзакций в поставщике последний должен поддерживать транзакции. Поставщик Windows PowerShell Registry в Windows Vista и более поздних версиях Windows поддерживает транзакции. Также можно использовать класс Microsoft.PowerShell.Commands.Management.TransactedString для включения в транзакции выражений в любой версии Windows, поддерживающей Windows PowerShell. Другие поставщики Windows PowerShell также могут поддерживать транзакции.

Одновременно может быть активна только одна транзакция. При запуске новой независимой транзакции во время выполнения другой транзакции (т. е. пока другая транзакция не завершена или не отменена) новая транзакция становится активной транзакцией, и ее необходимо зафиксировать или откатить, прежде чем можно будет внести какие-либо изменения в первоначальную транзакцию.

Командлет Start-Transaction входит в набор командлетов, поддерживающих обработку транзакций в Windows PowerShell. Дополнительные сведения см. в разделе about_Transactions.

Параметры

-Independent

Запускает транзакцию, независимую от какой-либо выполняющейся транзакции. По умолчанию при использовании командлета Start-Transaction во время выполнения другой транзакции в выполняющуюся транзакцию добавляется новый подписчик. Этот параметр действует только при наличии в сеансе уже выполняющейся транзакции.

По умолчанию при использовании командлета Start-Transaction во время выполнения другой транзакции существующий объект транзакции используется повторно и количество подписчиков увеличивается. Это во многом похоже на присоединение к первоначальной транзакции. Команда Undo-Transaction откатывает всю транзакцию. Для завершения транзакции необходимо ввести по команде Complete-Transaction для каждого подписчика. Поскольку большинство одновременно выполняющихся транзакций связаны между собой, поведение по умолчанию подходит для большинства случаев.

При использовании параметра Independent создается новая транзакция, которая может быть завершена или отменена без затрагивания существующей транзакции. Однако, поскольку одновременно может быть активна только одна транзакция, необходимо завершить или откатить новую транзакцию, прежде чем продолжить работу над первоначальной транзакцией.

Обязательно?

false

Позиция?

named

Значение по умолчанию

Reuse the original transaction object.

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-RollbackPreference: <RollbackSeverity>

Задает условия, при которых транзакция автоматически откатывается. По умолчанию используется значение "Error".

Допустимые значения:

-- Error: транзакция автоматически откатывается, если происходит прерывающая или непрерывающая ошибка. Значение "Error" используется по умолчанию.

-- Terminating error: транзакция автоматически откатывается, если происходит прерывающая ошибка.

-- Never: транзакция не откатывается автоматически ни при каких условиях.

Обязательно?

false

Позиция?

named

Значение по умолчанию

Error

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-Timeout <int>

Задает максимальное время активности транзакции в минутах. По истечении этого времени транзакция автоматически откатывается.

По умолчанию для транзакций, запущенных из командной строки, время ожидания не задано. При запуске транзакций с помощью скрипта время ожидания по умолчанию составляет 30 минут.

Обязательно?

false

Позиция?

named

Значение по умолчанию

No timeout (infinite)

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-Confirm

Запрашивает подтверждение перед выполнением команды.

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

-WhatIf

Описывает, что произойдет при выполнении команды, без ее фактического выполнения.

Обязательно?

false

Позиция?

named

Значение по умолчанию

Принимать входные данные из конвейера?

false

Принимать подстановочные знаки?

false

<CommonParameters>

Данный командлет поддерживает общие параметры -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer и -OutVariable. Дополнительные сведения см. в разделе about_Commonparameters.

Ввод и вывод

Входным типом является тип объектов, которые можно передавать командлету по конвейеру. Возвращаемым типом является тип объектов, возвращаемых командлетом.

Входные данные

Нет

Передать входные данные этому командлету по конвейеру невозможно.

Выходные данные

Нет

Этот командлет не формирует никаких выходных данных.

Пример 1

C:\PS>cd hkcu:\software

PS HKCU:\software> start-transaction

PS HKCU:\software> new-item MyCompany -UseTransaction

PS HKCU:\software> new-itemproperty MyCompany -name MyKey -value 123 -UseTransaction

PS HKCU:\software> undo-transaction

Описание
-----------
Приведенные команды запускают и затем откатывают транзакцию. Поскольку транзакция откатывается, никакие изменения в реестр не вносятся.






Пример 2

C:\PS>cd hkcu:\software

PS HKCU:\software> start-transaction

PS HKCU:\software> new-item MyCompany -UseTransaction

PS HKCU:\software> new-itemproperty MyCompany -name MyKey -value 123 -UseTransaction

PS HKCU:\software> complete-transaction

Описание
-----------
Приведенные команды запускают и затем завершают транзакцию. До применения команды Complete-Transaction никакие изменения в реестр не вносятся.






Пример 3

C:\PS>cd HKCU:\software
PS HKCU:\software> start-transaction
PS HKCU:\software> new-item -path NoPath -name MyCompany -UseTransaction
PS HKCU:\software> new-item -path . -name MyCompany -UseTransaction

PS HKCU:\software> start-transaction -RollbackPreference never
PS HKCU:\software> new-item -path NoPath -name MyCompany -UseTransaction
PS HKCU:\software> new-item -path . -name MyCompany -UseTransaction

# Start-Transaction (-rollbackpreference error)

PS HKCU:\software> start-transaction
PS HKCU:\software> new-item -path NoPath -Name MyCompany -UseTransaction
New-Item : The registry key at the specified path does not exist.
At line:1 char:9
+ new-item <<<<  -path NoPath -Name MyCompany -UseTransaction

PS HKCU:\software> new-item -path . -name MyCompany -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 MyCompany -UseTransaction



# Start-Transaction (-rollbackpreference never)
PS HKCU:\software> start-transaction -RollbackPreference never
PS HKCU:\software> new-item -path NoPath -name MyCompany -UseTransaction
New-Item : The registry key at the specified path does not exist.
At line:1 char:9
+ new-item <<<<  -path NoPath -name MyCompany -UseTransaction


PS HKCU:\software> new-item -path . -name MyCompany -UseTransaction
  Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
  0   0 MyCompany                      {}

PS HKCU:\Software> complete-transaction
# Succeeds

Описание
-----------
Этот пример демонстрирует эффект от изменения значения параметра RollbackPreference.

В первом наборе команд параметр RollbackPreference в команде Start-Transaction не задан. В результате используется значение по умолчанию ("Error"). При возникновении ошибки в одной из команд транзакции (указанный путь не существует) транзакция автоматически откатывается.

Во втором наборе команд в команде Start-Transaction используется параметр RollbackPreference со значением "Never". В результате при возникновении ошибки в одной из команд транзакции транзакция остается активной и может быть успешно завершена.

Поскольку большинство транзакций должны выполняться без ошибок, как правило, используется предусмотренное по умолчанию значение параметра RollbackPreference.






Пример 4

C:\PS>cd HKCU:\software

PS HKCU:\software> start-transaction
PS HKCU:\software> new-item MyCompany -UseTransaction

PS HKCU:\software> start-transaction
PS HKCU:\software> get-transaction
PS HKCU:\software> new-item MyCompany2 -UseTransaction

PS HKCU:\software> complete-transaction
PS HKCU:\software> complete-transaction

PS HKCU:\Software> Get-Transaction

RollbackPreference   SubscriberCount   Status
------------------   ---------------   ------
Error                2                 Active

Описание
-----------
В этом примере показан результат использования командлета Start-Transaction при наличии выполняющейся транзакции. Это во многом похоже на присоединение к выполняющейся транзакции.

Хотя показанная команда является упрощенной, подобная ситуация обычно имеет место, когда транзакция предполагает выполнение скрипта, включающего завершенную транзакцию.

Первая команда Start-Transaction запускает транзакцию. Первая команда New-Item является частью транзакции. 

Вторая команда Start-Transaction добавляет в транзакцию нового подписчика. Команда Get-Transaction теперь возвращает транзакцию с количеством подписчиков, равным 2. Вторая команда New-Item является частью этой же транзакции.

Изменения в реестр не вносятся до тех пор, пока вся транзакция не будет завершена. Для завершения транзакции необходимо ввести две команды Complete-Transaction — по одной для каждого подписчика. Если откатить транзакцию на каком-либо этапе, произойдет откат всей транзакции для обоих подписчиков.






Пример 5

C:\PS>cd HKCU:\software
PS HKCU:\software> start-transaction
PS HKCU:\software> new-item MyCompany -UseTransaction

PS HKCU:\software> start-transaction -independent
PS HKCU:\software> get-transaction
PS HKCU:\software> undo-transaction

PS HKCU:\software> new-itemproperty -path MyCompany -name MyKey -value 123 -UseTransaction
PS HKCU:\software> complete-transaction
PS HKCU:\software> dir my*

PS HKCU:\Software> get-transaction

RollbackPreference   SubscriberCount   Status
------------------   ---------------   ------
Error                1                 Active

PS HKCU:\software> undo-transaction
PS HKCU:\software> new-itemproperty -path MyCompany -name MyKey -value 123 -UseTransaction

MyKey
-----
123

PS HKCU:\software> complete-transaction
PS HKCU:\software> dir my*

   Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
  0   1 MyCompany                      {MyKey}

Описание
-----------
В этом примере показано, что происходит при использовании параметра Independent командлета Start-Transaction для запуска транзакции во время выполнения другой транзакции. В данном случае новая транзакция откатывается, не затрагивая первоначальную транзакцию.

Хотя транзакции логически независимы, в связи с тем, что одновременно может быть активна только одна транзакция, необходимо откатить или зафиксировать более новую транзакцию, прежде чем продолжить работу над первоначальной транзакцией.

Первый набор команд запускает транзакцию. Команда New-Item является частью первой транзакции.

Во втором наборе команд в команде Start-Transaction используется параметр Independent. Следующая за ней команда Get-Transaction выводит объект транзакции для активной транзакции (более новой). Количество подписчиков равно 1, что показывает, что транзакции не связаны между собой. 

При выполнении отката активной транзакции с помощью команды Undo-Transaction первоначальная транзакция снова становится активной.

Команда New-ItemProperty, которая является частью первоначальной транзакции, выполняется без ошибки, и первоначальную транзакцию можно завершить с помощью команды Complete-Transaction. В результате в реестр вносится изменение.






Пример 6

C:\PS>cd hkcu:\software

PS HKCU:\software> start-transaction
PS HKCU:\software> new-item MyCompany1 -UseTransaction
PS HKCU:\software> new-item MyCompany2 
PS HKCU:\software> new-item MyCompany3 -UseTransaction

PS HKCU:\software> dir my*

PS HKCU:\software> complete-transaction
PS HKCU:\software> dir my*

PS HKCU:\Software> dir my*

   Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
  0   0 MyCompany2                     {}

PS HKCU:\Software> complete-transaction

PS HKCU:\Software> dir my*

   Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
  0   0 MyCompany1                     {}
  0   0 MyCompany2                     {}
  0   0 MyCompany3                     {}

Описание
-----------
Этот пример показывает, что переданные во время выполнения транзакции команды могут включаться в транзакцию или не включаться. Только команды с параметром UseTransaction являются частью транзакции.

В первой и третьей командах New-Item используется параметр UseTransaction. Эти команды являются частью транзакции. Поскольку во второй команде New-Item параметр UseTransaction не используется, она не является частью транзакции.

Первая команда "dir" показывает результат. Вторая команда New-Item завершается немедленно, однако первая и третья команды не вступают в силу New-Item до фиксации транзакции.

Команда Complete-Transaction фиксирует транзакцию. В результате вторая команда "dir" показывает, что все новые элементы добавлены в реестр.






Пример 7

C:\PS>start-transaction -timeout 2

# Wait two minutes...

C:\PS> get-transaction

C:\PS> new-item HKCU:\Software\MyCompany -UseTransaction

C:\PS> start-transaction -timeout 2

# Wait two minutes...

C:\PS>> get-transaction

RollbackPreference   SubscriberCount   Status
------------------   ---------------   -----------
Error                1                 RolledBack 


C:\PS> new-item HKCU:\Software\MyCompany -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

Описание
-----------
Эта команда с помощью параметра Timeout командлета Start-Transaction запускает транзакцию, которая должна быть завершена в течение двух минут. Если по истечении этого времени транзакция не будет завершена, она автоматически откатывается.

По истечении времени ожидания уведомление не выводится, однако свойство Status объекта транзакции устанавливается равным RolledBack и команды, в которых используется параметр UseTransaction, завершаются ошибкой.






См. также




Содержание