次の方法で共有


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 コマンドが送信されたときにのみ変更されます。

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

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

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

パラメーター

-Confirm

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

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

-WhatIf

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

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

入力

None

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

出力

None

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

メモ

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

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

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