トップ回答者
Windows Server 2008R2(Beta)のPowerShellV2でファイルアクセスのトランザクション化できない?

質問
-
Windows Server 2008R2(Beta)のPowerShellV2では、
トランザクション関係の機能・コマンドレットが追加せれています。
それをつかってファイルアクセスをトランザクション化する、
Powershellスクリプトを書きました。
TxF_commit.ps1----------------------------------------------
# 利用データ
$FileName = "test_data.txt"
$ContentInitial = "InitialContent"
$ContentAddition = "AddtionalContent"# トランザクション開始
start-transaction# 新規ファイル作成、内容書込み
new-item $FileName -type File -usetransaction
Set-Content $FileName $ContentInitial -usetransaction# トランザクション完了前に状態確認
get-Item $FileName
get-content $FileName# 作成済ファイルに内容追加
Add-Content $FileName $ContentAddition -usetransaction# トランザクション完了前に状態確認
get-Item $FileName
get-content $FileName# トランザクション終了
complete-transaction# トランザクション完了後に状態確認
get-Item $FileName
get-content $FileName
------------------------------------------------------------これを実行すると、
------------------------------------------------------------
PS U:\> .\TxF_commit.ps1セキュリティ警告
信頼するスクリプトのみを実行してください。インターネットから入手したスクリプト
は便利ですが、コンピュータに危害を及ぼす可能性があります。U:\01_PowerShell\02_
検証プログラム\TxF_commit.ps1 を実行しますか?
[D] 実行しない(D) [R] 一度だけ実行する(R) [S] 中断(S) [?] ヘルプ
(既定値は "D"):R
The provider does not support transactions.Please perform the operation again
without the -UseTransaction parameter.
発生場所 U:\TxF_commit.ps1:13 文字:1
+ <<<< new-item $FileName -type File -usetransaction
+ CategoryInfo : 未実装: (:) []、PSNotSupportedException
+ FullyQualifiedErrorId : NotSupportedThe provider does not support transactions.Please perform the operation again
without the -UseTransaction parameter.
発生場所 U:\TxF_commit.ps1:14 文字:1
+ <<<< Set-Content $FileName $ContentInitial -usetransaction
+ CategoryInfo : 未実装: (:) []、PSNotSupportedException
+ FullyQualifiedErrorId : NotSupported
ディレクトリ: U:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2009/02/05 17:32 34 test_data.txt
InitialContent
AddtionalContent
The provider does not support transactions. Please perform the operation again
without the -UseTransaction parameter.
発生場所 U:\TxF_commit.ps1:21 文字:1
+ <<<< Add-Content $FileName $ContentAddition -usetransaction
+ CategoryInfo : 未実装: (:) []、PSNotSupportedException
+ FullyQualifiedErrorId : NotSupported-a--- 2009/02/05 17:32 34 test_data.txt
InitialContent
AddtionalContent
-a--- 2009/02/05 17:32 34 test_data.txt
InitialContent
AddtionalContent
------------------------------------------------------------
となります。「The provider does not support transactions. 」というのが、
FileSystem(プロバイダ)は、トランザクションをサポートしないと
いうように読めるのですが、そういうことでしょうか?2009年2月5日 9:18
回答
-
おっしゃる通り、現状ファイルシステムではトランザクションは利用できません。
(エラーメッセージの通りです。)
PowerShell V2 ではトランザクションに対応していますが、
実際に機能させるためには、それぞれのプロバイダーで実装する必要があります。(*1)
現状実装されているのは、レジストリプロバイダーのみです。(*2)
ファイルシステムで、トランザクション機能が使えるようになるためには、
ファイルシステムプロバイダーがトランザクション対応にならなければいけませんが、
現状非対応です。今後の対応の有無については発表されていません。
トランザクションに対応しているプロバイダーの一覧は、以下のコマンドレットで取得できます。
get-psprovider | where {$_.Capabilities -like "*transactions*"}
*1) ご自分でコマンドレットを作成される場合は、コマンドレット内で実装することも可能です。
*2) PowerShell と共にインストールされている、releaseNotes.rtf の Transactions の項もご参照ください。
田辺茂也- 回答としてマーク 鈴木裕子Support Engineer 2009年2月26日 2:05
2009年2月6日 9:00
すべての返信
-
おっしゃる通り、現状ファイルシステムではトランザクションは利用できません。
(エラーメッセージの通りです。)
PowerShell V2 ではトランザクションに対応していますが、
実際に機能させるためには、それぞれのプロバイダーで実装する必要があります。(*1)
現状実装されているのは、レジストリプロバイダーのみです。(*2)
ファイルシステムで、トランザクション機能が使えるようになるためには、
ファイルシステムプロバイダーがトランザクション対応にならなければいけませんが、
現状非対応です。今後の対応の有無については発表されていません。
トランザクションに対応しているプロバイダーの一覧は、以下のコマンドレットで取得できます。
get-psprovider | where {$_.Capabilities -like "*transactions*"}
*1) ご自分でコマンドレットを作成される場合は、コマンドレット内で実装することも可能です。
*2) PowerShell と共にインストールされている、releaseNotes.rtf の Transactions の項もご参照ください。
田辺茂也- 回答としてマーク 鈴木裕子Support Engineer 2009年2月26日 2:05
2009年2月6日 9:00 -
two get ruby ツイゲルビ さん、こんにちは。フォーラムオペレーターの鈴木裕子です(^O^)/
投稿から少し時間が経過いたしましたが、弊社 田辺の投稿はご参照いただけましたでしょうか?
同じ情報を探している方にぜひこちらのスレッドを参照していただきたいと思いましたので、勝手ながら私のほうで回答チェックをつけさせていただきました。もし不適切と思われた場合は、遠慮なくチェックを解除してくださいね。
IT技術者の皆様の情報交換の場として、これからもForumをご活用いただきたいと思っておりますので、また何かありましたらのぞいてみてください。
経験あるスレッドを見つけられた際は、ぜひぜひコメントの投稿もお願いします(^-^)お待ちしております!
マイクロソフト株式会社 フォーラムオペレータ 鈴木裕子2009年2月26日 2:14