Complete-Transaction

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

構文

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

説明

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

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

Complete-Transaction コマンドレットは、Windows PowerShellのトランザクション機能をサポートする一連のコマンドレットの 1 つです。 詳細については、「about_Transactions」を参照してください。

例 1: トランザクションをコミットする

PS C:\> cd hkcu:\software
PS HKCU:\software> Start-Transaction
PS HKCU:\software> New-Item MyCompany -UseTransaction
PS HKCU:\software> dir m*
Hive: HKEY_CURRENT_USER\software

SKC  VC Name                           Property
---  -- ----                           --------
82   1 Microsoft                      {(default)}

PS HKCU:\software> Complete-Transaction
PS HKCU:\software> dir m*
Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
82   1 Microsoft                      {(default)}
0   0 MyCompany                      {}

この例では、 Complete-Transaction コマンドレットを使用してトランザクションをコミットした場合の動作を示します。

Start-Transaction コマンドは、トランザクションを開始します。 New-Item コマンドは 、UseTransaction パラメーターを使用して、トランザクションにコマンドを含めます。

最初の dir (Get-ChildItem) コマンドは、新しい項目がまだレジストリに追加されていないことを示します。

Complete-Transaction コマンドはトランザクションをコミットします。これにより、レジストリの変更が有効になります。 その結果、2 番目の dir コマンドは、レジストリが変更されたことを示します。

例 2: 複数のサブスクライバーを持つトランザクションをコミットする

PS C:\> cd hkcu:\software
PS HKCU:\software> Start-Transaction
PS HKCU:\software> New-Item MyCompany -UseTransaction
Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
0   0 MyCompany                      {}

PS HKCU:\software> Start-Transaction
PS HKCU:\Software> Get-Transaction

RollbackPreference   SubscriberCount  Status
------------------   ---------------  ------
Error                2                Active

PS HKCU:\software> New-ItemProperty -Path MyCompany -Name MyKey -Value -UseTransaction

MyKey
-----
123

PS HKCU:\software> Complete-Transaction
PS HKCU:\software> Get-Transaction

RollbackPreference   SubscriberCount  Status
------------------   ---------------  ------
Error                1                Active

PS HKCU:\software> dir m*
Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
82   1 Microsoft                      {(default)}

PS HKCU:\software> Complete-Transaction
PS HKCU:\software> dir 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 コマンドによってトランザクションが開始されます。 UseTransaction パラメーターを持つ New-Item コマンドは、MyCompany キーをソフトウェア キーに追加します。 New-Item コマンドレットはキー オブジェクトを返しますが、レジストリ内のデータはまだ変更されていません。

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

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

2 番目 の Complete-Transaction コマンドは、トランザクション全体をコミットし、レジストリ内のデータを変更します。 これは、変更を示す 2 番目の dir m* コマンドによって確認されます。

例 3: データを変更しないトランザクションを実行する

PS C:\> cd hkcu:\software
PS HKCU:\software> Start-Transaction
PS HKCU:\software> New-Item MyCompany -UseTransaction
PS HKCU:\software> dir m*
Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
82   1 Microsoft                      {(default)}

PS HKCU:\software> dir m* -UseTransaction
Hive: HKEY_CURRENT_USER\Software

SKC  VC Name                           Property
---  -- ----                           --------
82   1 Microsoft                      {(default)}
0   0 MyCompany                      {}

PS HKCU:\software> Complete-Transaction

この例では、トランザクション内の Get-* コマンドおよびデータを変更しない他のコマンドを使用する値を示します。 トランザクション内で Get-* コマンドを使用した場合は、コマンドはトランザクションの一部であるオブジェクトを取得します。 これによって、変更をコミットする前にトランザクション内の変更をプレビューできます。

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

Complete-Transaction コマンドが実行されるまで、新しいレジストリ キーはレジストリに追加されないため、単純なディレクトリ (Get-ChildItem) コマンドを実行すると、新しいキーなしでレジストリが表示されます。

ただし、 UseTransaction パラメーターを dir コマンドに追加すると、コマンドはトランザクションの一部になり、データにまだ追加されていない場合でもトランザクション内の項目を取得します。

パラメーター

-Confirm

コマンドレットの実行前に確認を求めるメッセージが表示されます。

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False
-WhatIf

コマンドレットの実行時に発生する内容を示します。 このコマンドレットは実行されません。

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False

入力

None

このコマンドレットにパイプを使用してオブジェクトを渡すことはできません。

出力

None

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

メモ

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

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

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