次の方法で共有


Complete-Transaction

アクティブなトランザクションをコミットします。

構文

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

説明

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

トランザクションに複数のサブスクライバーが含まれている場合、トランザクションをコミットするには、Complete-Transaction コマンドごとに 1 つの Start-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 を使用して、複数のサブスクライバーを持つトランザクションをコミットする方法を示します。

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

デモンストレーションの目的で、この例では、コマンド ラインで入力された一連のコマンドを示します。 実際には、トランザクションはスクリプトで実行される可能性が高く、セカンダリ トランザクションはメイン スクリプトによって呼び出される関数またはヘルパー スクリプトによって実行されます。

この例では、Start-Transaction コマンドによってトランザクションが開始されます。 New-Item パラメーターを指定した コマンドは、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 コマンドを実行すると、新しいキーなしでレジストリが表示されます。

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

パラメーター

-Confirm

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

型:SwitchParameter
Aliases:cf
配置:Named
規定値:False
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-WhatIf

コマンドレットを実行した場合の動作を示します。 コマンドレットは実行されません。

型:SwitchParameter
Aliases:wi
配置:Named
規定値:False
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

入力

None

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

出力

None

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

メモ

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

    アクティブなトランザクション以外のトランザクションはロールバックできません。 別のトランザクションをロールバックするには、最初にアクティブなトランザクションをコミットまたはロールバックする必要があります。

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