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
}