7

如何从嵌套的 InlineScript 调用工作流中的函数?以下引发异常,因为该函数超出了 InlineScript 的范围:

Workflow test
{
    function func1
    {
        Write-Verbose "test verbose" -verbose
    }

    InlineScript
    {
        func1
    }
}
test
4

2 回答 2

3

inlinescript活动在标准的非工作流 Windows PowerShell 会话中运行命令,然后将输出返回到工作流。”

在这里阅读更多。

每个内联脚本都在一个新的 PowerShell 会话中执行,因此它看不到父工作流中定义的任何函数。$Using:您可以使用语句将变量传递给工作流,

workflow Test
{
    $a = 1

    # Change the value in workflow scope usin $Using: , return the new value.
    $a = InlineScript {$a = $Using:a+1; $a}
    "New value of a = $a"
}   

Test

PS> New value of a = 2

但不是该专业的功能或模块。

于 2015-04-24T04:40:55.080 回答
0

过去,我使用将所有常见内容放入 powershell 模块文件的技术,然后执行以下操作:

workflow Hey
{
   PrepareMachine
   ConfigureIIS
}

function PrepareMachine() {
  Import-Module "MyCommonStuff"
  CallSomethingBlahBlah()
}

function ConfigureIIS {
  Import-Module "MyCommonStuff"
  CallSomethingBlahBlah2()
}

您甚至不必将其包装在模块中,您只需在工作流之外定义函数,它仍然可以工作:

workflow Hey 
{
   InlineScript {
     func1
  }
}

function func1 {
  Write-Output "Boom!"
}

也就是说,我对工作流程完全没有印象。如果您问我,这似乎是毫无意义的功能。工作流最有用的东西是并行运行的能力,但作业也可以做到。上面的想法是确保您确实需要工作流程:)

于 2015-04-24T07:38:29.120 回答