トランザクションへのコマンドの追加
トランザクションの開始方法が分かりました。次はトランザクションにコマンドを追加する方法について説明します。
トランザクションにコマンドを追加するには、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
以降に実行したコマンドのすべてを実行しなかったものとして処理を行います。