Поделиться через


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

Этот командлет не формирует никаких выходных данных.

Примечания

  • Зафиксированную транзакцию нельзя откатить, а транзакцию, для которой выполнен откат, — зафиксировать.

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

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