Запускает транзакцию.
Синтаксис
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, завершаются ошибкой.
См. также