about_InlineScript

简短说明

介绍了在工作流中运行 PowerShell 命令的 inlinescript 活动。

长说明

inlinescript 活动在共享的 PowerShell 会话的工作流中运行命令。 inlinescript 仅在工作流中有效。

语法

inlinescript {<script block>} <ActivityCommonParameters>

详细说明

inlinescript 活动在共享的 PowerShell 会话中运行命令。 你可以将它包括在工作流中,以在工作流中运行共享数据的命令,以及在其他方式中无效的命令。

inlinescript 脚本块可以包括所有有效的 PowerShell 命令和表达式。 由于 inlinescript 脚本块中的命令和表达式在同一会话中运行,因此它们共享所有状态和数据,包括导入的模块和变量的值。

可以在工作流或嵌套工作流中的任何位置放置 inlinescript 活动,包括循环或控件语句或 parallelsequence 脚本块。

inlinescript 活动具有活动通用参数,包括 PSPersist。 但是,inlinescript 脚本块中的命令和表达式没有检查点或持久性之类的工作流功能,也不支持工作流或活动通用参数。 有关详细信息,请参阅 about_ActivityCommonParameters

InlineScript 变量

默认情况下,工作流中定义的变量对 inlinescript 脚本块中的命令不可见。 若要使工作流变量对 inlinescript 可见,请使用 Using: 作用域修饰符。 对于 Using: 中的每个变量,只需要将 inlinescript 作用域修饰符使用一次。

有关 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 值,例如通过使用 cmdlet。New-PSWorkflowExecutionOption

示例

以下工作流中的 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

另请参阅