次の方法で共有


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 コマンドによってトランザクションが開始されます。 UseTransaction パラメーターを指定した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 コマンドに UseTransaction パラメーターを追加すると、コマンドはトランザクションの一部になり、データにまだ追加されていない場合でも、トランザクション内の項目を取得します。

パラメーター

-Confirm

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

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

-WhatIf

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

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

入力

None

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

出力

None

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

メモ

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

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

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