PowerShell Cmdlet - Start-Transaction
 記事記号:[mh1907] 初版:2011/Sep/30

この文書は、Windows PowerShellのヘルプ機能で表示される内容を再構成したものです。

名前
    Start-Transaction
    
概要
    トランザクションを開始します。
    
構文
    Start-Transaction [-Independent] [-RollbackPreference {Error | TerminatingEr
    ror | 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 つです。詳細については、「abo
    ut_Transactions」を参照してください。
    
パラメーター
    -Independent [<SwitchParameter>]
        進行中のトランザクションとは別にトランザクションを開始します。既定では、
        別のトランザクションの進行中に Start-Transaction を使用すると、進行中の
        トランザクションに新しいサブスクライバーが追加されます。このパラメーター
        が影響を及ぼすのは、トランザクションがセッション内で既に進行中の場合のみ
        です。
        
        既定では、トランザクションの進行中に Start-Transaction を使用すると、既
        存のトランザクション オブジェクトが再利用され、サブスクライバーの数がイ
        ンクリメントされます。結果は、元のトランザクションの追加とほぼ同じです。
        Undo-Transaction コマンドを実行すると、トランザクション全体がロールバッ
        クされます。トランザクションを完了するには、各サブスクライバーに対して 
        Complete-Transaction コマンドを入力する必要があります。同時に進行してい
        る大半のトランザクションは互いに関連しているので、ほとんどの場合、既定
        の設定で十分です。
        
        Independent パラメーターを使用すると、トランザクションが新規に作成され
        ます。このトランザクションは、元のトランザクションに影響を及ぼすことな
        く、完了することも元に戻すこともできます。ただし、一度に複数のトランザ
        クションを有効にすることはできないので、元のトランザクションに対する作
        業を再開するには、その前に新しいトランザクションを完了するか、ロールバ
        ックする必要があります。
        
        必須                         false
        位置                         named
        既定値                       元のトランザクション オブジェクトを再利用し
                                     ます。
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -RollbackPreference <RollbackSeverity>
        トランザクションが自動的にロールバックされる条件を指定します。既定値は "
        Error" です。
        
        有効な値は次のとおりです。
        
        -- Error: 終了エラーまたは未終了エラーが発生すると、トランザクションが自
           動的にロールバックされます。既定値は "Error" です。
        -- Terminating error: 終了エラーが発生すると、トランザクションが自動的に
           ロールバックされます。
        -- Never: トランザクションは自動的にロールバックされません。
        
        必須                         false
        位置                         named
        既定値                       Error
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -Timeout <int>
        トランザクションが有効である最大時間を分単位で指定します。タイムアウトを
        過ぎると、トランザクションは自動的にロールバックされます。
        
        既定では、コマンド ラインで開始されたトランザクションにタイムアウトはあ
        りません。トランザクションがスクリプトによって開始された場合、既定のタイ
        ムアウトは 30 分です。
        
        必須                         false
        位置                         named
        既定値                       タイムアウトなし (無制限)
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -Confirm [<SwitchParameter>]
        コマンドを実行する前に確認メッセージを表示します。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    -WhatIf [<SwitchParameter>]
        実際にコマンドを実行せずに、コマンドを実行すると何が起きるかを出力します。
        
        必須                         false
        位置                         named
        既定値                       
        パイプライン入力を許可する   false
        ワイルドカード文字を許可する false
        
    <CommonParameters>
        このコマンドレットは、次の共通パラメーターをサポートします: Verbose、
        Debug、ErrorAction、ErrorVariable、WarningAction、WarningVariable、
        OutBuffer、および OutVariable。詳細については、
        「get-help 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 -UseTra
    nsaction
    
    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 -UseTra
    nsaction
    
    PS HKCU:\software> complete-transaction
    
    説明
    -----------
    これらのコマンドは、トランザクションを開始して完了します。Complete-Transacti
    on コマンドが使用されるまで、レジストリは変更されません。
    
    -------------------------- 例 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 h
    as 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" の Rollb
    ackPreference パラメーターを使用します。その結果、トランザクション コマンド
    でエラーが発生しても、トランザクションは有効のままであり、正常に完了できます。
    
    大半のトランザクションはエラーなしで実行される必要があるので、通常は Rollback
    Preference パラメーターの既定値が使用されます。
    
    -------------------------- 例 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                     {}
    
    説明
    -----------
    この例は、トランザクションの進行中に実行されたコマンドをトランザクションに含
    めることができるかどうかを示します。トランザクションの一部になるのは、UseTra
    nsaction パラメーターを使用するコマンドだけです。
    
    最初と 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 h
    as timed out.
    At line:1 char:9
    + new-item <<<<  MyCompany -UseTransaction
    
    説明
    -----------
    このコマンドは、Start-Transaction の Timeout パラメーターを使用して、2 分以内
    に完了する必要があるトランザクションを開始します。タイムアウトを過ぎてもトラ
    ンザクションが完了しない場合は、自動的にロールバックされます。
    
    タイムアウトを過ぎても通知されませんが、トランザクション オブジェクトの Statu
    s プロパティは RolledBack に設定されいるので、UseTransaction パラメーターを使
    用するコマンドは失敗します。
    
関連するリンク
    Online version: http://go.microsoft.com/fwlink/?LinkID=135262
    about_Transactions 
    Get-Transaction 
    Complete-Transaction 
    Undo-Transaction 
    Use-Transaction 
    	
記事で解説しているパソコンの環境
 基本ソフト: Windows 7
 キーワード: Windows PowerShell、ヘルプ、Cmdlet、Start-Transaction
ご利用数: 1975216
感想・要望・問い合わせは こちら