Фиксирует активную транзакцию.
Синтаксис
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, эта команда становится частью транзакции и получает элементы транзакции, даже если они еще не добавлены к данным.
См. также