about_InlineScript

適用対象: Windows PowerShell 3.0

トピック

about_InlineScript

概要

ワークフローで Windows PowerShell® コマンドを実行する InlineScript アクティビティについて説明します。

詳細説明

InlineScript アクティビティは、ワークフロー内の共有 Windows PowerShell セッションでコマンドを実行します。このアクティビティはワークフローでのみ有効です。

構文

    InlineScript {<script block>} <ActivityCommonParameters>

詳細説明

InlineScript アクティビティは、共有 Windows PowerShell セッションでコマンドを実行します。ワークフローに含めることで、データを共有するコマンドや、そうしなければワークフローで有効でないコマンドを実行できます。

InlineScript スクリプト ブロックは、有効なすべての Windows PowerShell コマンドと式を含むことができます。InlineScript スクリプト ブロック内のコマンドと式は同じセッションで実行されるので、インポートしたモジュールや変数の値を含め、すべての状態とデータを共有します。

InlineScript アクティビティはワークフロー内または入れ子になったワークフロー内の任意の場所に配置することが可能で、その中にはループやコントロール ステートメント、Parallel または Sequence スクリプト ブロック内などが含まれます。

InlineScript アクティビティは、PSPersist を含むアクティビティ共通パラメーターを持ちます。ただし、InlineScript スクリプト ブロック内のコマンドと式は、チェックポイント処理 (永続化) やワークフローまたはアクティビティの共通パラメーターなどのワークフロー機能を持ちません。

InlineScript 内の変数

既定では、ワークフローで定義されている変数は InlineScript スクリプト ブロック内のコマンドには可視的ではありません。ワークフロー変数を InlineScript に可視化するには、$Using スコープ修飾子を使用します。$Using スコープ修飾子は InlineScript 内の各変数に対して一度だけ必要です。

次の例は、$Using スコープ修飾子によって、$a 最上位ワークフロー変数の値が InlineScript スクリプト ブロック内のコマンドで使用可能になることを示します。

        workflow Test-Workflow
        {
            $a = 3

            # Without $Using, the $a workflow variable is not visible
            # in inline script.
            InlineScript {"Inline A0 = $a"}
    
            # $Using imports the variable and its current value.
            InlineScript {"Inline A1 = $Using:a"}
        }

        PS C:\> Test-Workflow
        Inline A0 = 
        Inline A1 = 3 

InlineScript コマンドは、ワークフロー スコープからインポートされた変数の値を変更できますが、その変更はワークフロー スコープでは可視的ではありません。それらを可視化するには、次の例で示すように、変更された値をワークフロー スコープに返します。

         workflow Test-Workflow
         {
             $a = 3

             # Changes to the InlineScript variable value do not 
             # change the workflow variable.
             InlineScript {$a = $using:a+1; "Inline A = $a"}
             "Workflow A = $a"

             # To change the variable in workflow scope, return the 
             # new value.
              $a = InlineScript {$b = $Using:a+1; $b}
              "Workflow New A = $a"
        }   

        PS C:\> test-workflow
        Inline A = 4
        Workflow A = 3
        Workflow New A = 4

トラブルシューティング上の注意:$Using スコープ修飾子を使用したステートメントは、InlineScript スクリプト ブロック内の変数を使用する前に出現する必要があります。

インプロセスの実行

信頼性を向上させるために、InlineScript スクリプト ブロック内のコマンドは、ワークフローを実行するプロセスの外部にある独自のプロセスで実行され、その出力をワークフロー プロセスに返します。

Windows PowerShell が InlineScript アクティビティをワークフロー プロセスで実行するように指示するには、New-PSWorkflowExecutionOption コマンドレットの使用などによって、セッション構成の OutOfProcessActivity プロパティから InlineScript 値を削除します。

詳細については、「ワークフロー内での Windows PowerShell コマンドの実行方法」(https://go.microsoft.com/fwlink/?LinkId=261983) を参照してください。

次のワークフローの InlineScript には、ComObject パラメーターを持つ New-Object コマンドレットの使用など、ワークフロー内で無効なコマンドが含まれています。

        workflow Test-Workflow
        {
            $ie = InlineScript 
            {
                $ie = New-Object -ComObject InternetExplorer.Application 
                -property @{navigate2="www.microsoft.com"}
           
                $ie
            }
            $ie
        }