2016-01-29 50 views
0

我在試圖弄清楚爲什麼參數溢出對於在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 
+0

'孩子@飛濺',而不是'孩子$飛濺' –

回答

1

請參閱https://technet.microsoft.com/en-us/library/jj574140.aspx?f=255&MSPPError=-21472173969

潑灑沒有在工作流活動或調用工作流允許的。

您將需要不使用splatting或將PowerShell Workflow Runbook切換到native PowerShell runbook

+0

感謝喬,很明顯; -x。但是,這很奇怪,在我的現實世界中,它似乎工作或忽略它,因爲它不會引發錯誤。我只能推測,但也許它是如何編譯腳本的(自下而上?),並且在不同類型的錯誤會被拋出的編譯階段是否有不同的階段?在我解決了這個似乎是'運行時'問題的問題後,我開始得到'依賴腳本編譯'錯誤。現在所有問題都解決了,謝謝! – JoeBrockhaus

+0

更多背景:這些最初是本地PS,它們正在被轉換(儘可能簡單,現在)到工作流活動中,以便並行運行它們(至少比開始新作業和輪詢輸出更容易)。因爲這些runbook中有幾個都接受大部分相同的參數集,所以我只是試圖減少它們以減少儘可能多的重複代碼:) – JoeBrockhaus