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