【发布时间】:2016-03-09 01:31:59
【问题描述】:
我正在挠头,试图弄清楚为什么在 Azure 自动化中执行的一组工作流运行手册无法使用参数分解。
我有 3 个以嵌套方式调用的运行手册(超级、子、子)。 它们都(通常)共享相同的参数。在我的真实场景中,我有多个子和子 Runbook,我想使用 splatting,因此我可以定义一个哈希表并根据需要传递它,而不必列出所有参数。
我也尝试过使用-PSParameterCollection 参数。但是,在 Azure 自动化中,这似乎仅适用于最顶层的 Runbook(已经有效),因为它会在子级中引发参数未找到错误。注释部分here 说嵌套三层深度的工作流不支持任何常用参数,包括工作流常用参数,这似乎是个问题,具体取决于这些运行手册的编译方式。 .但我认为我不能在不限制运行手册的可重用性的情况下避免这种情况。我不希望被调用的工作流被编译为调用工作流中的嵌套工作流。
我得到的错误是:
$newnumber = sub @splatter
~~~~~~~~~~
找不到名为“0”的参数。支持的参数有:Debug, ErrorAction, ....
奇怪的是,与我在这些测试运行手册中看到的不同,在我的“真实世界”工作流程中,我没有在顶部收到此错误-level runbook - 仅当从“sub”中调用“child”runbook 时。
workflow child
{
Param ([int]$val)
Write-Verbose "child: val ($val)"
$NewNumber = $val*2
$NewNumber
}
workflow childtwo
{
Param ([int]$val, [int]$valtwo)
Write-Verbose "childtwo: val ($val) valtwo ($valtwo)"
$NewNumber = $val * $valtwo
$NewNumber
}
workflow sub
{
Param ([int]$val)
Write-Verbose "sub: val ($val)"
$splatter = @{ val = $val }
# works
$NewNumber = child -val $splatter.val
# fail
$NewNumber = child @splatter
# works
$NewNumber = childtwo -val $splatter.val -valtwo 2
# fail
$NewNumber = childtwo ($splatter + @{ valtwo = 2 })
$mergeSplatter = ($splatter + @{ valtwo = 2 })
$NewNumber = childtwo @mergeSplatter
$twoSplatter = @{ val = $val; valtwo = 2 }
$NewNumber = childtwo @twoSplatter
$NewNumber
}
workflow super
{
Param([int]$val)
Write-Verbose "super: id is $val"
$splatter = @{ val = $val }
$newnumber = sub -val $val
$newnumber = sub @splatter # @ or $ doesn't matter - fails the same
Write-Verbose "super: newnumber is $newnumber"
$newnumber
}
super 2
【问题讨论】:
-
child @splatter,不是child $splatter
标签: powershell azure azure-automation powershell-workflow