Complete-Transaction
Фиксирует активную транзакцию.
Синтаксис
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 добавляет запись реестра в новый раздел MyCompany. И в этом случае команда возвращает значение, но реестр не изменен.
Первая 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
Запрос подтверждения перед выполнением командлета.
Type: | SwitchParameter |
Aliases: | cf |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-WhatIf
Показывает, что произойдет при запуске командлета. Командлет не выполняется.
Type: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Входные данные
None
Нельзя передать объекты в этот командлет с помощью конвейера.
Выходные данные
None
Этот командлет не формирует никаких выходных данных.
Примечания
Зафиксированную транзакцию нельзя откатить, а транзакцию, для которой выполнен откат, — зафиксировать.
Нельзя выполнить откат транзакции, которая не является активной. Чтобы откатить другую транзакцию, сначала нужно зафиксировать или откатить активную транзакцию.
По умолчанию, если какая-либо часть транзакции не может быть зафиксирована, например, если команда транзакции завершается ошибкой, откатывается вся транзакция.
Связанные ссылки
PowerShell
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по