从InlineScript调用函数

时间:2015-04-24 03:56:18

标签: powershell powershell-workflow

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

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

    InlineScript
    {
        func1
    }
}
test

2 个答案:

答案 0 :(得分:3)

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

了解更多here

每个inlinescript都在新的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

但不是该主题的功能或模块。

答案 1 :(得分:0)

在过去,我使用了将所有常见内容放在powershell模块文件中的技术,并执行:

(2,12,"amar"),(2,120,"kamal"),(2,120,"kamal")

你甚至不需要将它包装在一个模块中,你可以从工作流中定义该功能,它仍然可以工作:

workflow Hey
{
   PrepareMachine
   ConfigureIIS
}

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

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

尽管如此,工作流程并没有让我印象深刻。如果你问我,这似乎是毫无意义的功能。关于工作流的最有用的东西是并行运行的能力,但是工作也可以做到。上面提到的想法是确保你确实需要工作流程:)