Фиксирует активную транзакцию.

Синтаксис

Complete-Transaction [-Confirm] [-WhatIf] [<CommonParameters>]

Описание

Командлет Complete-Transaction фиксирует активную транзакцию. При фиксации транзакции ее команды завершаются и данные, на которые повлияли эти команды, изменяются.

Для фиксации транзакции с несколькими подписчиками необходимо ввести по одной команде Complete-Transaction для каждой команды Start-Transaction.

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

Параметры

-Confirm

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

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

false

Позиция?

named

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

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

false

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

false

-WhatIf

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

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

false

Позиция?

named

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

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

false

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

false

<CommonParameters>

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

Ввод и вывод

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

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

Нет

Объекты невозможно передать командлету Complete-Transaction по конвейеру.

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

Нет

Этот командлет не возвращает никаких объектов.

Примечания

Невозможно откатить зафиксированную транзакцию и зафиксировать транзакцию, откат которой был выполнен.

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

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

Пример 1

C:\PS>cd hkcu:\software

PS HKCU:\software> start-transaction

PS HKCU:\software> new-item MyCompany -UseTransaction
PS HKCU:\software> dir m*

   Hive: HKEY_CURRENT_USER\software

SKC  VC Name                           Property
---  -- ----                           --------
 82   1 Microsoft                      {(default)}

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

   Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
 82   1 Microsoft                      {(default)}
  0   0 MyCompany                      {}

Описание
-----------
В этом примере показан результат работы командлета Complete-Transaction, используемого для фиксации транзакции.

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

Результат выполнения первой команды "dir" (Get-ChildItem) показывает, что новый элемент еще не добавлен в реестр.

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






Пример 2

C:\PS>cd hkcu:\software

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

   Hive: HKEY_CURRENT_USER\Software

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

PS HKCU:\software> start-transaction
PS HKCU:\Software> Get-Transaction

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

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

MyKey
-----
123

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

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

PS HKCU:\software> dir m*

   Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
 82   1 Microsoft                      {(default)}

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

   Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
 82   1 Microsoft                      {(default)}
  0   1 MyCompany                      {MyKey}

Описание
-----------
В этом примере показано, как использовать командлет Complete-Transaction для фиксации транзакции с несколькими подписчиками. 

Чтобы зафиксировать транзакцию, в которой участвует несколько подписчиков, необходимо выполнить по одной команде Complete-Transaction для каждой команды Start-Transaction. Данные изменяются только после выполнения последней команды Complete-Transaction. 

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

В этом примере транзакция запускается командой Start-Transaction. Команда New-Item с параметром UseTransaction добавляет раздел MyCompany в раздел Software. Несмотря на то что команда New-Item возвращает объект раздела, изменения данных в реестре пока не происходит.

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

Первая команда Complete-Transaction уменьшает количество подписчиков на 1. Это подтверждается командой Get-Transaction. Однако изменения данных не происходит, о чем свидетельствует результат выполнения команды "dir m*" (Get-ChildItem).

Вторая команда Complete-Transaction фиксирует всю транзакцию и изменяет данные в реестре. Это подтверждается второй командой "dir m*", отображающей изменения.






Пример 3

C:\PS>cd hkcu:\software

PS HKCU:\software> start-transaction

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

PS HKCU:\software> dir m*

   Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
 82   1 Microsoft                      {(default)}


PS HKCU:\software> dir m* -UseTransaction

   Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
 82   1 Microsoft                      {(default)}
  0   0 MyCompany                      {}

PS HKCU:\software> complete-transaction

Описание
-----------
В этом примере показана полезность использования в транзакции команд Get-* и других команд, не изменяющих данные. При использовании в транзакции команда Get-* получает объекты, являющиеся частью транзакции. Это позволяет узнать, как будут выглядеть изменения до их фиксации.

В этом примере выполняется запуск транзакции. Команда New-Item с параметром UseTransaction добавляет новый раздел реестра в составе транзакции.

Новый раздел будет добавлен в реестр только после выполнения команды Complete-Transaction, поэтому обычная команда "dir" (Get-ChildItem) отображает содержимое реестра без нового раздела. 

Однако если выполнить команду "dir" с параметром UseTransaction, эта команда становится частью транзакции и получает элементы транзакции, даже если они еще не добавлены к данным.






См. также




Содержание