Complete-Transaction
Фиксирует активную транзакцию.
Синтаксис
Default (По умолчанию)
Complete-Transaction
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Описание
Командлет Complete-Transaction фиксирует активную транзакцию. При фиксации транзакции команды в транзакции завершаются и изменяются данные, затронутые командами.
Если транзакция включает несколько подписчиков, чтобы зафиксировать транзакцию, необходимо ввести одну команду Complete-Transaction для каждой команды Start-Transaction.
Командлет Complete-Transaction является одним из наборов командлетов, поддерживающих функцию транзакций в Windows PowerShell.
Дополнительные сведения см. в about_Transactions.
Примеры
Пример 1. Фиксация транзакции
Set-Location HKCU:\software
Start-Transaction
New-Item MyCompany -UseTransaction
Get-ChildItem m*
Hive: HKEY_CURRENT_USER\software
SKC VC Name Property
--- -- ---- --------
82 1 Microsoft {(default)}
Complete-Transaction
Get-ChildItem m*
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
82 1 Microsoft {(default)}
0 0 MyCompany {}
В этом примере показано, что происходит при использовании командлета Complete-Transaction для фиксации транзакции.
Команда Start-Transaction запускает транзакцию. Команда New-Item использует параметр UseTransaction для включения команды в транзакцию.
Первая команда Get-ChildItem показывает, что новый элемент еще не добавлен в реестр.
Команда Complete-Transaction фиксирует транзакцию, что делает изменение реестра эффективным. В результате вторая команда Get-ChildItem показывает, что реестр изменен.
Пример 2. Фиксация транзакции с несколькими подписчиками
Set-Location HKCU:\software
Start-Transaction
New-Item MyCompany -UseTransaction
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 0 MyCompany {}
Start-Transaction
Get-Transaction
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 2 Active
New-ItemProperty -Path MyCompany -Name MyKey -Value -UseTransaction
MyKey
-----
123
Complete-Transaction
Get-Transaction
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 1 Active
Get-ChildItem m*
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
82 1 Microsoft {(default)}
Complete-Transaction
Get-ChildItem 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
Первая команда Complete-Transaction уменьшает число подписчиков на 1. Это подтверждается командой Get-Transaction. Однако данные не изменяются, как свидетельствует команда Get-ChildItem m*.
Вторая команда Complete-Transaction фиксирует всю транзакцию и изменяет данные в реестре. Это подтверждается второй командой Get-ChildItem m*, в которой отображаются изменения.
Пример 3. Выполнение транзакции, которая не изменяет данные
Set-Location HKCU:\software
Start-Transaction
New-Item MyCompany -UseTransaction
Get-ChildItem m*
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
82 1 Microsoft {(default)}
Get-ChildItem m* -UseTransaction
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
82 1 Microsoft {(default)}
0 0 MyCompany {}
Complete-Transaction
В этом примере показано значение команд Get-* и других команд, которые не изменяют данные в транзакции. Когда команда Get-\* используется в транзакции, она получает объекты, которые являются частью транзакции. Это позволяет предварительно просмотреть изменения в транзакции до фиксации изменений.
В этом примере запускается транзакция. Команда New-Item с параметром UseTransaction
Так как новый раздел реестра не добавляется в реестр до запуска команды Complete-Transaction, простая команда Get-ChildItem отображает реестр без нового ключа.
Однако при добавлении параметра useTransaction в команду Get-ChildItem команда становится частью транзакции и получает элементы транзакции, даже если они еще не добавлены в данные.
Параметры
-Confirm
Запрашивает подтверждение перед запуском cmdlet.
Свойства параметров
| Тип: | SwitchParameter |
| Default value: | False |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
| Aliases: | cf |
Наборы параметров
(All)
| Position: | Named |
| Обязательно: | False |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-WhatIf
Показывает, что произойдет, если командлет будет запущен. Командлет не запускается.
Свойства параметров
| Тип: | SwitchParameter |
| Default value: | False |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
| Aliases: | wi |
Наборы параметров
(All)
| Position: | Named |
| Обязательно: | False |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
CommonParameters
Этот командлет поддерживает общие параметры: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction и -WarningVariable. Дополнительные сведения см. в разделе about_CommonParameters.
Входные данные
None
Невозможно передать объекты в этот командлет.
Выходные данные
None
Этот командлет не создает выходные данные.
Примечания
Вы не можете откатить транзакцию, которая была зафиксирована, или зафиксировать транзакцию, которая была откатена.
Откат транзакции, отличной от активной транзакции, невозможно. Чтобы откатить другую транзакцию, необходимо сначала зафиксировать или откатить активную транзакцию.
По умолчанию, если любая часть транзакции не может быть зафиксирована, например если команда в транзакции приводит к ошибке, откат всей транзакции выполняется.