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
このコマンドレットは出力を生成しません。
メモ
コミットされたトランザクションのロールバック、またはロールバックされたトランザクションのコミットを行うことはできません。
有効でないトランザクションはロールバックできません。 別のトランザクションをロールバックするには、有効なトランザクションを先にコミットするかロールバックする必要があります。
既定では、トランザクションのコマンドのエラーなどでトランザクションの一部をコミットできない場合、トランザクション全体がロールバックされます。
関連リンク
PowerShell