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