如何从嵌套的 InlineScript 调用工作流中的函数?以下引发异常,因为该函数超出了 InlineScript 的范围:
Workflow test
{
function func1
{
Write-Verbose "test verbose" -verbose
}
InlineScript
{
func1
}
}
test
如何从嵌套的 InlineScript 调用工作流中的函数?以下引发异常,因为该函数超出了 InlineScript 的范围:
Workflow test
{
function func1
{
Write-Verbose "test verbose" -verbose
}
InlineScript
{
func1
}
}
test
“ 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
但不是该专业的功能或模块。
过去,我使用将所有常见内容放入 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!"
}
也就是说,我对工作流程完全没有印象。如果您问我,这似乎是毫无意义的功能。工作流最有用的东西是并行运行的能力,但作业也可以做到。上面的想法是确保您确实需要工作流程:)