トランザクションへのコマンドの追加
トランザクションの開始方法が分かりました。次はトランザクションにコマンドを追加する方法について説明します。
トランザクションにコマンドを追加するには、Use-Transactionコマンドレットを使用するか、UseTransaction パラメーターを持つコマンドレットを使用します。
Use-Transactionコマンドレットは、スクリプトブロックを有効なトランザクションに追加することができます。ただし、スクリプトブロックに追加できるかは、Microsoft.PowerShell.Commands.Management.TransactedStringクラス(※1)のインスタンス等の.NET Frameworkオブジェクトと制限されています。
リスト2はUse-Transaction コマンドレットを使用する例です。最初に、TransactedStringクラスのインスタンスを作成し、$TS変数に保存します。
次にUse-Transaction コマンドレットを使用して、$TS変数に文字を追加しています。このようにUse-Transactionを使用して実行したコマンドは、コミット処理を行って初めて反映されます。
#トランザクションの開始
Start-Transaction
#TransactedStringインスタンスの作成
$TS = New-Object Microsoft.PowerShell.Commands.Management.TransactedString
#トランザクションへスクリプトブロックを追加
Use-Transaction {$TS.append("Hello PowerShell")} -UseTransaction
#トランザクションのコミット(詳細は後述)
Complete-Transaction
次に、UseTransaction パラメーターを持つコマンドレットの使用例を見てみましょう。Use-Transactionパラメーターを持つコマンドレットの調べ方は「トランザクション用コマンドレット」の項でも述べたとおり
Get-Help * -parameter UseTransaction
と入力します。
リスト3はUseTransactionパラメーターを持つNew-Itemコマンドレットを使用する例です(レジストリを操作しますので、実行には十分気をつけてください)。
はじめにHKCU\Softwareに移動し、トランザクションを開始します。次にMySoftwareというレジストリキーを作成し、MyKeyというキーを作成します。最後にUndo-Transactionコマンドレットを使用して、一連の処理をロールバックします(Undo-Transactionについては後述します)。
C:\PS>cd hkcu:\software PS HKCU:\software> Start-Transaction PS HKCU:\software> New-Item MySoftware -UseTransaction PS HKCU:\software> New-ItemProperty MySoftware -name MyKey -value 123 -UseTransaction PS HKCU:\software> Undo-Transaction
Microsoft.PowerShell.Commands.Management.TransactedStringクラスは、文字列をトランザクション操作するクラス。
トランザクションのロールバック
次にトランザクションをロールバックする方法について説明します。
ロールバックとは、トランザクションで実行した一連のコマンドを、実行しなかったことにするものです。ただし、すでにコミットされたトランザクションはロールバックすることができないので注意が必要です。ロールバックを行うにはUndo-Transactionコマンドレットを使用する方法とStart-Transactionに-RollbackPreferenceを使用する方法があります。
Undo-Transactionコマンドレットは次の書式で実行します。
Undo-Transaction
ここで、先ほどのリスト3をもう一度見てください。一番最後の行のUndo-Transactionが実行されると、Start-Transaction以降に実行したコマンドのすべてを実行しなかったものとして処理を行います。
