locked
Windows Server 2008R2(Beta)のPowerShellV2でファイルアクセスのトランザクション化できない? RRS feed

  • 質問

  • 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 : NotSupported

    The 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 の項もご参照ください。

    田辺茂也
    2009年2月6日 9:00

すべての返信

  • おっしゃる通り、現状ファイルシステムではトランザクションは利用できません。
    (エラーメッセージの通りです。)

    PowerShell V2 ではトランザクションに対応していますが、
    実際に機能させるためには、それぞれのプロバイダーで実装する必要があります。(*1)
    現状実装されているのは、レジストリプロバイダーのみです。(*2)

    ファイルシステムで、トランザクション機能が使えるようになるためには、
    ファイルシステムプロバイダーがトランザクション対応にならなければいけませんが、
    現状非対応です。今後の対応の有無については発表されていません。

    トランザクションに対応しているプロバイダーの一覧は、以下のコマンドレットで取得できます。
     get-psprovider | where {$_.Capabilities -like "*transactions*"}

    *1) ご自分でコマンドレットを作成される場合は、コマンドレット内で実装することも可能です。
    *2) PowerShell と共にインストールされている、releaseNotes.rtf の Transactions の項もご参照ください。

    田辺茂也
    2009年2月6日 9:00
  • two get ruby ツイゲルビ さん、こんにちは。フォーラムオペレーターの鈴木裕子です(^O^)/

    投稿から少し時間が経過いたしましたが、弊社 田辺の投稿はご参照いただけましたでしょうか?
    同じ情報を探している方にぜひこちらのスレッドを参照していただきたいと思いましたので、勝手ながら私のほうで
    回答チェックをつけさせていただきました。もし不適切と思われた場合は、遠慮なくチェックを解除してくださいね。

    IT技術者の皆様の情報交換の場として、これからもForumをご活用いただきたいと思っておりますので、また何かありましたらのぞいてみてください。
    経験あるスレッドを見つけられた際は、ぜひぜひコメントの投稿もお願いします(^-^)お待ちしております!

    マイクロソフト株式会社 フォーラムオペレータ 鈴木裕子
    2009年2月26日 2:14