about_InlineScript
简短说明
介绍了在工作流中运行 PowerShell 命令的 InlineScript
活动。
长说明
InlineScript
活动在共享的 PowerShell 会话的工作流中运行命令。 InlineScript
仅在工作流中有效。
语法
InlineScript {<script block>} <ActivityCommonParameters>
详细说明
InlineScript
活动在共享的 PowerShell 会话中运行命令。 你可以将它包括在工作流中,以在工作流中运行共享数据的命令,以及在其他方式中无效的命令。
InlineScript
脚本块可以包括所有有效的 PowerShell 命令和表达式。 由于 InlineScript
脚本块中的命令和表达式在同一会话中运行,因此它们共享所有状态和数据,包括导入的模块和变量的值。
你可以将 InlineScript
活动放置在工作流或嵌套工作流中的任意位置,包括在循环或控制语句内,或者包括在并行或序列脚本块内。
InlineScript
活动具有活动通用参数,包括 PSPersist。 但是,InlineScript
脚本块中的命令和表达式没有检查点或持久性之类的工作流功能,也不支持工作流或活动通用参数。 有关详细信息,请参阅 about_ActivityCommonParameters。
InlineScript 变量
默认情况下,工作流中定义的变量对 InlineScript
脚本块中的命令不可见。 若要使工作流变量对 InlineScript
可见,请使用 $Using
作用域修饰符。 对于 InlineScript
中的每个变量,只需要将 $Using
作用域修饰符使用一次。
有关 $Using
作用域修饰符的详细信息,请参阅 about_Remote_Variables。
以下示例表明,$Using
作用域修饰符使 $a
顶级工作流变量的值可用于 InlineScript
脚本块中的命令。
workflow Test-Workflow {
$a = 3
## Without $Using, the $a workflow variable isn't visible
## in inline script.
InlineScript {"Inline A0 = $a"}
## $Using imports the variable and its current value.
InlineScript {"Inline A1 = $Using:a"}
}
Test-Workflow
Inline A0 =
Inline A1 = 3
在 InlineScript 中返回变量
InlineScript
命令可以更改从工作流作用域导入的变量的值,但所做的更改在工作流作用域中不可见。 若要使其可见,则将更改的值返回到工作流作用域,如下面的示例所示。
workflow Test-Workflow {
$a = 3
## Changes to the InlineScript variable value don't
## 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"
}
Test-Workflow
Inline A = 4
Workflow A = 3
Workflow New A = 4
注意
带 $Using
作用域修饰符的语句应出现在 InlineScript
脚本块中使用的任何变量之前。
在进程内运行
为了提高可靠性,InlineScript
脚本块中的命令在它们自己的进程中运行(独立于运行工作流的进程),然后将其输出返回到工作流进程。
若要指示 PowerShell 在工作流进程中运行 InlineScript
活动,请从会话配置的 OutOfProcessActivity 属性中移除 InlineScript
值,例如通过使用 New-PSWorkflowExecutionOption
cmdlet。
示例
以下工作流中的 InlineScript
包括在 PowerShell 中有效但在工作流中无效的命令。 例如,带 ComObject 参数的 New-Object
cmdlet。
workflow Test-Workflow
{
$ie = InlineScript {
$ie = New-Object -ComObject InternetExplorer.Application -Property @{navigate2="www.microsoft.com"}
$ie.Visible = $true
}
$ie
}
Test-Workflow