Share via


Complete-Transaction

有効なトランザクションをコミットします。

構文

Complete-Transaction
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]

説明

このコマンドレットは Complete-Transaction 、アクティブなトランザクションをコミットします。 トランザクションをコミットすると、トランザクション内のコマンドの最終処理が実行され、コマンドの対象のデータが変更されます。

トランザクションに複数のサブスクライバーが含まれている場合、トランザクションをコミットするには、コマンドごとに Start-Transaction 1 つのComplete-Transactionコマンドを入力する必要があります。

この Complete-Transaction コマンドレットは、Windows PowerShell のトランザクション機能をサポートする一連のコマンドレットの 1 つです。 詳細については、「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 トランザクションがコミットされ、レジストリの変更が有効になります。 その結果、2 番目 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 を示します。

マルチサブスクライバー トランザクションをコミットするには、コマンドごとに Start-Transaction 1 つのComplete-Transactionコマンドを入力する必要があります。 データは、最後 Complete-Transaction のコマンドが送信されたときにのみ変更されます。

具体的な方法を示すために、この例ではコマンド ラインに入力される一連のコマンドを示します。 実際には通常、トランザクションはスクリプト内で実行され、メイン スクリプトによって呼び出される関数または補助的なスクリプトによって実行される 2 次的なトランザクションを伴います。

この例では、コマンドによって Start-Transaction トランザクションが開始されます。 New-Item UseTransaction パラメーターを指定したコマンドは、MyCompany キーをソフトウェア キーに追加します。 コマンドレットは New-Item キー オブジェクトを返しますが、レジストリ内のデータはまだ変更されていません。

2 番目 Start-Transaction のコマンドは、既存のトランザクションに 2 番目のサブスクライバーを追加します。 コマンドレットは Get-Transaction 、サブスクライバー数が 2 であることを確認します。 UseTransaction パラメーターを持つ New-ItemProperty コマンドは、新しい MyCompany キーにレジストリ エントリを追加します。 再びコマンドから値が返されますが、レジストリは変更されません。

最初 Complete-Transaction のコマンドは、サブスクライバー数を 1 ずつ減らします。 これはコマンドによって Get-Transaction 確認されます。 ただし、コマンドによって Get-ChildItem m* 示されているように、データは変更されません。

2 番目 Complete-Transaction のコマンドは、トランザクション全体をコミットし、レジストリ内のデータを変更します。 これは、変更を示す 2 番目 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-\* 使用すると、トランザクションの一部であるオブジェクトが取得されます。 これによって、変更をコミットする前にトランザクション内の変更をプレビューできます。

この例では、トランザクションが開始されます。 UseTransaction パラメーターを指定した New-Item コマンドは、トランザクションの一部としてレジストリに新しいキーを追加します。

新しいレジストリ キーは、コマンドが実行されるまで 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

このコマンドレットは出力を生成しません。

メモ

  • コミットされたトランザクションのロールバック、またはロールバックされたトランザクションのコミットを行うことはできません。

    有効でないトランザクションはロールバックできません。 別のトランザクションをロールバックするには、有効なトランザクションを先にコミットするかロールバックする必要があります。

    既定では、トランザクションのコマンドのエラーなどでトランザクションの一部をコミットできない場合、トランザクション全体がロールバックされます。