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
このコマンドレットは出力を生成しません。
メモ
コミットされたトランザクションをロールバックしたり、ロールバックされたトランザクションをコミットしたりすることはできません。
アクティブなトランザクション以外のトランザクションはロールバックできません。 別のトランザクションをロールバックするには、最初にアクティブなトランザクションをコミットまたはロールバックする必要があります。
既定では、トランザクション内のコマンドでエラーが発生した場合など、トランザクションの一部をコミットできない場合、トランザクション全体がロールバックされます。