从 InlineScript 调用函数

Call a function from an InlineScript

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

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

    InlineScript
    {
        func1
    }
}
test

"The inlinescript activity runs commands in a standard, non-workflow Windows PowerShell session and then returns the output to the workflow."

阅读更多here

每个内联脚本都在新的 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

但不是那个母校的函数或模块。

过去我使用的技术是将所有常见的东西放在 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!"
}

也就是说,我对工作流程一点印象都没有。如果您问我,这似乎是毫无意义的功能。关于工作流最有用的东西是能够 运行 并行处理事情,但作业也可以做到这一点。上面的想法是确保你真的需要工作流程:)