Start-Transaction
トランザクションを開始します。
構文
Start-Transaction [-Independent] [-RollbackPreference {<Error> | <TerminatingError> | <Never>}] [-Timeout <int>] [-Confirm] [-WhatIf] [<CommonParameters>]
説明
Start-Transaction コマンドレットを実行すると、トランザクションが開始されます。トランザクションは、1 つの単位として管理される一連のコマンドです。トランザクションは、完了する (コミットする) ことも、完全に元に戻す (ロールバックする) こともできます。ロールバックすると、トランザクションによって変更されたデータが元の状態に復元されます。1 つのトランザクション内の一連のコマンドは 1 つの単位として管理されるので、コマンドはすべてコミットされるか、すべてロールバックされるかのいずれかとなります。
既定では、トランザクション内のいずれかのコマンドでエラーが発生すると、トランザクションは自動的にロールバックされます。ただし、RollbackPreference パラメーターを使用してこの動作を変更できます。
トランザクションで使用するコマンドレットは、トランザクションをサポートするように設計されている必要があります。トランザクションをサポートするコマンドレットには、UseTransaction パラメーターがあります。1 つのプロバイダーで複数のトランザクションを実行するには、プロバイダーがトランザクションをサポートする必要があります。Windows Vista 以降のバージョンの Windows で使用される Windows PowerShell レジストリ プロバイダーは、トランザクションをサポートしています。また、Microsoft.PowerShell.Commands.Management.TransactedString クラスを使用して、Windows PowerShell をサポートする任意のバージョンの Windows 上でトランザクションに式を含めることもできます。他の Windows PowerShell プロバイダーもトランザクションをサポートできます。
一度に複数のトランザクションを有効にすることはできません。あるトランザクションの進行中 (完了していないし、元に戻されてもいない)、別のトランザクションを新たに開始すると、新しいトランザクションが有効になります。そのため、元のトランザクションを変更するには、新しいトランザクションをコミットするか、ロールバックする必要があります。
Start-Transaction コマンドレットは、Windows PowerShell のトランザクション機能をサポートする一連のコマンドレットのうちの 1 つです。詳細については、「about_Transactions」を参照してください。
パラメーター
-Independent
進行中のトランザクションとは別にトランザクションを開始します。既定では、別のトランザクションの進行中に Start-Transaction を使用すると、進行中のトランザクションに新しいサブスクライバーが追加されます。このパラメーターが影響を及ぼすのは、トランザクションがセッション内で既に進行中の場合のみです。
既定では、トランザクションの進行中に Start-Transaction を使用すると、既存のトランザクション オブジェクトが再利用され、サブスクライバーの数がインクリメントされます。結果は、元のトランザクションの追加とほぼ同じです。Undo-Transaction コマンドを実行すると、トランザクション全体がロールバックされます。トランザクションを完了するには、各サブスクライバーに対して Complete-Transaction コマンドを入力する必要があります。同時に進行している大半のトランザクションは互いに関連しているので、ほとんどの場合、既定の設定で十分です。
Independent パラメーターを使用すると、トランザクションが新規に作成されます。このトランザクションは、元のトランザクションに影響を及ぼすことなく、完了することも元に戻すこともできます。ただし、一度に複数のトランザクションを有効にすることはできないので、元のトランザクションに対する作業を再開するには、その前に新しいトランザクションを完了するか、ロールバックする必要があります。
必須 |
false |
位置 |
named |
既定値 |
Reuse the original transaction object. |
パイプライン入力を許可する |
false |
ワイルドカード文字を許可する |
false |
-RollbackPreference <RollbackSeverity>
トランザクションが自動的にロールバックされる条件を指定します。既定値は "Error" です。
有効な値は次のとおりです。
-- Error: 終了エラーまたは未終了エラーが発生すると、トランザクションが自動的にロールバックされます。既定値は "Error" です。
-- Terminating error: 終了エラーが発生すると、トランザクションが自動的にロールバックされます。
-- Never: トランザクションは自動的にロールバックされません。
必須 |
false |
位置 |
named |
既定値 |
Error |
パイプライン入力を許可する |
false |
ワイルドカード文字を許可する |
false |
-Timeout <int>
トランザクションが有効である最大時間を分単位で指定します。タイムアウトを過ぎると、トランザクションは自動的にロールバックされます。
既定では、コマンド ラインで開始されたトランザクションにタイムアウトはありません。トランザクションがスクリプトによって開始された場合、既定のタイムアウトは 30 分です。
必須 |
false |
位置 |
named |
既定値 |
No timeout (infinite) |
パイプライン入力を許可する |
false |
ワイルドカード文字を許可する |
false |
-Confirm
コマンドを実行する前に確認メッセージを表示します。
必須 |
false |
位置 |
named |
既定値 |
|
パイプライン入力を許可する |
false |
ワイルドカード文字を許可する |
false |
-WhatIf
実際にコマンドを実行せずに、コマンドを実行すると何が起きるかを出力します。
必須 |
false |
位置 |
named |
既定値 |
|
パイプライン入力を許可する |
false |
ワイルドカード文字を許可する |
false |
<CommonParameters>
このコマンドレットは、次の共通パラメーターをサポートします: -Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer、および -OutVariable。詳細については、次を参照してください: about_Commonparameters.
入力と出力
入力値の型は、コマンドレットへのパイプが可能なオブジェクトの型です。戻り値の型は、コマンドレットによって返されるオブジェクトの型です。
入力 |
なし パイプを使用してこのコマンドレットに入力を渡すことはできません。 |
出力 |
なし このコマンドレットは出力を生成しません。 |
例 1
C:\PS>cd hkcu:\software
PS HKCU:\software> start-transaction
PS HKCU:\software> new-item MyCompany -UseTransaction
PS HKCU:\software> new-itemproperty MyCompany -name MyKey -value 123 -UseTransaction
PS HKCU:\software> undo-transaction
説明
-----------
これらのコマンドは、トランザクションを開始してからロールバックします。トランザクションはロールバックされるので、レジストリは変更されません。
例 2
C:\PS>cd hkcu:\software
PS HKCU:\software> start-transaction
PS HKCU:\software> new-item MyCompany -UseTransaction
PS HKCU:\software> new-itemproperty MyCompany -name MyKey -value 123 -UseTransaction
PS HKCU:\software> complete-transaction
説明
-----------
これらのコマンドは、トランザクションを開始して完了します。Complete-Transaction コマンドが使用されるまで、レジストリは変更されません。
例 3
C:\PS>cd HKCU:\software
PS HKCU:\software> start-transaction
PS HKCU:\software> new-item -path NoPath -name MyCompany -UseTransaction
PS HKCU:\software> new-item -path . -name MyCompany -UseTransaction
PS HKCU:\software> start-transaction -RollbackPreference never
PS HKCU:\software> new-item -path NoPath -name MyCompany -UseTransaction
PS HKCU:\software> new-item -path . -name MyCompany -UseTransaction
# Start-Transaction (-rollbackpreference error)
PS HKCU:\software> start-transaction
PS HKCU:\software> new-item -path NoPath -Name MyCompany -UseTransaction
New-Item : The registry key at the specified path does not exist.
At line:1 char:9
+ new-item <<<< -path NoPath -Name MyCompany -UseTransaction
PS HKCU:\software> new-item -path . -name MyCompany -UseTransaction
New-Item : Cannot use transaction. The transaction has been rolled back or has timed out.
At line:1 char:9
+ new-item <<<< -path . -name MyCompany -UseTransaction
# Start-Transaction (-rollbackpreference never)
PS HKCU:\software> start-transaction -RollbackPreference never
PS HKCU:\software> new-item -path NoPath -name MyCompany -UseTransaction
New-Item : The registry key at the specified path does not exist.
At line:1 char:9
+ new-item <<<< -path NoPath -name MyCompany -UseTransaction
PS HKCU:\software> new-item -path . -name MyCompany -UseTransaction
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 0 MyCompany {}
PS HKCU:\Software> complete-transaction
# Succeeds
説明
-----------
この例で、RollbackPreference パラメーター値を変更したときの結果を説明します。
最初のコマンド セットで、Start-Transaction コマンドは RollbackPreference パラメーターを使用しません。その結果、既定値 ("Error") が使用されます。トランザクション コマンドでエラー (指定されたパスが存在しない) が発生すると、トランザクションは自動的にロールバックされます。
2 番目のコマンド セットで、Start-Transaction コマンドは値が "Never" の RollbackPreference パラメーターを使用します。その結果、トランザクション コマンドでエラーが発生しても、トランザクションは有効のままであり、正常に完了できます。
大半のトランザクションはエラーなしで実行される必要があるので、通常は RollbackPreference パラメーターの既定値が使用されます。
例 4
C:\PS>cd HKCU:\software
PS HKCU:\software> start-transaction
PS HKCU:\software> new-item MyCompany -UseTransaction
PS HKCU:\software> start-transaction
PS HKCU:\software> get-transaction
PS HKCU:\software> new-item MyCompany2 -UseTransaction
PS HKCU:\software> complete-transaction
PS HKCU:\software> complete-transaction
PS HKCU:\Software> Get-Transaction
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 2 Active
説明
-----------
この例では、トランザクションの進行中に Start-Transaction コマンドを使用した結果を示します。結果は、進行中のトランザクションを追加した場合とほぼ同じです。
これは簡単なコマンドですが、トランザクションが完了したトランザクションを含むスクリプトの実行を伴う場合、このシナリオはよく見られます。
最初の Start-Transaction コマンドを実行すると、トランザクションが開始されます。最初の New-Item コマンドは、トランザクションの一部です。
2 番目の Start-Transaction コマンドを実行すると、トランザクションに新しいサブスクライバーが追加されます。すると、Get-Transaction コマンドが、サブスクライバーの数が 2 であるトランザクションを返します。2 番目の New-Item コマンドは、同じトランザクションの一部です。
トランザクション全体が完了するまで、レジストリは変更されません。トランザクションを完了するには、各サブスクライバーに対して Complete-Transaction コマンドを 1 つずつ、計 2 つ入力する必要があります。任意のポイントでトランザクションをロールバックする場合、両方のサブスクライバーに対してトランザクション全体がロールバックされます。
例 5
C:\PS>cd HKCU:\software
PS HKCU:\software> start-transaction
PS HKCU:\software> new-item MyCompany -UseTransaction
PS HKCU:\software> start-transaction -independent
PS HKCU:\software> get-transaction
PS HKCU:\software> undo-transaction
PS HKCU:\software> new-itemproperty -path MyCompany -name MyKey -value 123 -UseTransaction
PS HKCU:\software> complete-transaction
PS HKCU:\software> dir my*
PS HKCU:\Software> get-transaction
RollbackPreference SubscriberCount Status
------------------ --------------- ------
Error 1 Active
PS HKCU:\software> undo-transaction
PS HKCU:\software> new-itemproperty -path MyCompany -name MyKey -value 123 -UseTransaction
MyKey
-----
123
PS HKCU:\software> complete-transaction
PS HKCU:\software> dir my*
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 1 MyCompany {MyKey}
説明
-----------
この例では、別のトランザクションの進行中に Start-Transaction の Independent パラメーターを使用して、トランザクションを開始したときの結果を示します。この場合、新しいトランザクションは、元のトランザクションに影響を及ぼすことなくロールバックされます。
これらのトランザクションは論理的に独立していますが、一度に複数のトランザクションを有効にすることはできないので、元のトランザクションに対する作業を再開するには、その前に新しいトランザクションをロールバックするかコミットする必要があります。
最初のコマンド セットを実行すると、トランザクションが開始されます。New-Item コマンドは、最初のトランザクションの一部です。
2 番目のコマンド セットで、Start-Transaction コマンドは Independent パラメーターを使用します。それに続く Get-Transaction コマンドは、有効なトランザクション (最新のトランザクション) のトランザクション オブジェクトを示します。サブスクライバーの数は 1 であり、これらのトランザクションが互いに無関係であることを示します。
Undo-Transaction コマンドを使用して有効なトランザクションをロールバックすると、元のトランザクションが再度有効になります。
New-ItemProperty コマンドは、元のトランザクションの一部ですが、エラーが発生することなく完了します。元のトランザクションは、Complete-Transaction コマンドを使用して完了できます。その結果、レジストリが変更されます。
例 6
C:\PS>cd hkcu:\software
PS HKCU:\software> start-transaction
PS HKCU:\software> new-item MyCompany1 -UseTransaction
PS HKCU:\software> new-item MyCompany2
PS HKCU:\software> new-item MyCompany3 -UseTransaction
PS HKCU:\software> dir my*
PS HKCU:\software> complete-transaction
PS HKCU:\software> dir my*
PS HKCU:\Software> dir my*
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 0 MyCompany2 {}
PS HKCU:\Software> complete-transaction
PS HKCU:\Software> dir my*
Hive: HKEY_CURRENT_USER\Software
SKC VC Name Property
--- -- ---- --------
0 0 MyCompany1 {}
0 0 MyCompany2 {}
0 0 MyCompany3 {}
説明
-----------
この例は、トランザクションの進行中に実行されたコマンドをトランザクションに含めることができるかどうかを示します。トランザクションの一部になるのは、UseTransaction パラメーターを使用するコマンドだけです。
最初と 3 番目の New-Item コマンドが UseTransaction パラメーターを使用します。これらのコマンドはトランザクションの一部です。2 番目の New-Item コマンドは、UseTransaction パラメーターを使用しないので、トランザクションの一部ではありません。
最初の "dir" コマンドは結果を示します。2 番目の New-Item コマンドは直ちに完了しますが、最初と 3 番目の New-Item コマンドは、トランザクションがコミットされるまで有効になりません。
Complete-Transaction コマンドはトランザクションをコミットします。その結果、2 番目の "dir" コマンドは、新しい項目がすべてレジストリに追加されることを示します。
例 7
C:\PS>start-transaction -timeout 2
# Wait two minutes...
C:\PS> get-transaction
C:\PS> new-item HKCU:\Software\MyCompany -UseTransaction
C:\PS> start-transaction -timeout 2
# Wait two minutes...
C:\PS>> get-transaction
RollbackPreference SubscriberCount Status
------------------ --------------- -----------
Error 1 RolledBack
C:\PS> new-item HKCU:\Software\MyCompany -UseTransaction
New-Item : Cannot use transaction. The transaction has been rolled back or has timed out.
At line:1 char:9
+ new-item <<<< MyCompany -UseTransaction
説明
-----------
このコマンドは、Start-Transaction の Timeout パラメーターを使用して、2 分以内に完了する必要があるトランザクションを開始します。タイムアウトを過ぎてもトランザクションが完了しない場合は、自動的にロールバックされます。
タイムアウトを過ぎても通知されませんが、トランザクション オブジェクトの Status プロパティは RolledBack に設定されいるので、UseTransaction パラメーターを使用するコマンドは失敗します。
関連項目
概念
about_Transactions
Get-Transaction
Complete-Transaction
Undo-Transaction
Use-Transaction