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

另请参阅