次の方法で共有


Complete-Transaction

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

構文

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

説明

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

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

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

パラメーター

-Confirm

コマンドを実行する前に確認メッセージを表示します。

必須

false

位置

named

既定値

パイプライン入力を許可する

false

ワイルドカード文字を許可する

false

-WhatIf

実際にコマンドを実行せずに、コマンドを実行すると何が起きるかを出力します。

必須

false

位置

named

既定値

パイプライン入力を許可する

false

ワイルドカード文字を許可する

false

<CommonParameters>

このコマンドレットは、次の共通パラメーターをサポートします: -Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer、および -OutVariable。詳細については、次を参照してください: about_Commonparameters.

入力と出力

入力値の型は、コマンドレットへのパイプが可能なオブジェクトの型です。戻り値の型は、コマンドレットによって返されるオブジェクトの型です。

入力

なし

パイプを使用してオブジェクトを Complete-Transaction に渡すことはできません。

出力

なし

このコマンドレットはオブジェクトを返しません。

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

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

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

例 1

C:\PS>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

C:\PS>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 コマンドに対して Complete-Transaction コマンドを入力する必要があります。データは最後の Complete-Transaction コマンドが送信されたときにのみ変更されます。

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

この例では、Start-Transaction コマンドによってトランザクションが開始されます。UseTransaction パラメーターを使用する New-Item コマンドによって、MyCompany キーを Software キーに追加します。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

C:\PS>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 コマンドが実行されるまではレジストリに新しいレジストリ キーは追加されないので、単に "dir" (Get-ChildItem) コマンドを使用した場合は新しいキーのないレジストリが表示されます。

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





関連項目

概念

about_Transactions
Start-Transaction
Get-Transaction
Undo-Transaction
Use-Transaction