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


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 добавляет запись реестра в новый раздел 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

Запрашивает подтверждение перед запуском 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

Этот командлет не создает выходные данные.

Примечания

  • Вы не можете откатить транзакцию, которая была зафиксирована, или зафиксировать транзакцию, которая была откатена.

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

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