我在試圖弄清楚爲什麼參數溢出對於在Azure自動化中執行的一組工作流Runbook無效。powershell工作流程 - 不支持參數splatting?
我有3個Runbook(超級,子,孩子)被稱爲嵌套時尚。 他們都共享(通常)相同的參數。在我的實際場景中,我有多個子Runbook,我想使用splatting,所以我可以定義一個hashtable並根據需要傳遞它,而不必列出所有參數。
我也試過使用-PSParameterCollection
參數。但是,在Azure自動化中,這似乎只適用於最頂級的Runbook(已經可用),因爲它在子項中引發了一個未找到的參數錯誤。註釋部分here說深層嵌套三級的工作流不支持任何常見參數,包括工作流公共參數,這看起來可能是一個問題,具體取決於這些runbook如何編譯..但我不認爲我可以避免這種情況,而不會限制Runbook的可重用性。我不希望調用的工作流程被編譯爲調用的工作流程。
我得到的錯誤是:
$ newnumber =子@splatter
~~~~~~~~~~
無法找到名爲'0'的參數。支持的參數是:調試,ErrorAction,....
說也奇怪,不像我正在與這些測試運行手冊看到,在我的「真實世界」的工作流程,我不 GET只有在'sub'內調用'child'runbooks時纔會出現頂級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
'孩子@飛濺',而不是'孩子$飛濺' –