Рабочий процесс powershell - разделение параметров не поддерживается?

Я чешу в затылке, пытаясь понять, почему разделение параметров не работает для набора модулей Runbook рабочих процессов, выполняемых в службе автоматизации Azure.

У меня есть 3 модуля Runbook (super, sub, child), которые вызываются вложенным образом. Все они имеют (как правило) одни и те же параметры. В моем реальном сценарии у меня есть несколько подчиненных и дочерних модулей Runbook, и я хочу использовать splatting, чтобы я мог один раз определить хеш-таблицу и передать ее по мере необходимости, без необходимости перечислять все параметры.

Я также пробовал использовать параметр -PSParameterCollection. Однако в службе автоматизации Azure это, по-видимому, доступно только для самого верхнего модуля Runbook (который уже работает), поскольку он выдает ошибку «параметр не найден» для дочерних элементов. В разделе примечаний здесь говорится: Рабочие процессы, состоящие из трех уровни deep не поддерживают какие-либо общие параметры, включая общие параметры рабочего процесса, что, похоже, может быть проблемой, в зависимости от того, как скомпилированы эти модули Runbook ... но я не думаю, что смогу избежать этого, не ограничивая возможность повторного использования модулей Runbook. Я бы не ожидал, что вызываемые рабочие процессы будут скомпилированы как вложенные рабочие процессы внутри вызывающего.

Я получаю следующее сообщение об ошибке:

$ newnumber = sub @splatter
~~~~~~~~~~
Не удалось найти параметр с именем '0'. Поддерживаемые параметры: Debug, ErrorAction, ....

Как ни странно, в отличие от этих тестовых модулей Runbook, в моих «реальных» рабочих процессах я не получаю эту ошибку в модуле Runbook верхнего уровня. - только при вызове «дочерних» модулей Runbook из «sub».

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

person JoeBrockhaus    schedule 29.01.2016    source источник
comment
child @splatter, а не child $splatter   -  person Mathias R. Jessen    schedule 29.01.2016


Ответы (1)


См. https://technet.microsoft.com/en-us/library/jj574140.aspx?f=255&MSPPError=-2147217396:

Splatting не разрешен в действиях рабочего процесса или в вызовах рабочих процессов.

Вам нужно будет либо не использовать splatting, либо переключить Runbook рабочего процесса PowerShell на собственный модуль Runbook для PowerShell.

person Joe    schedule 01.02.2016
comment
Спасибо, Джо, довольно очевидно; -x. Но тогда это странно, в моем реальном сценарии он либо работает, либо игнорирует его, поскольку не выдает ошибку. Я могу только догадываться, но, возможно, это связано с тем, как скрипты компилируются (снизу вверх?), И существуют ли разные этапы компиляции, на которых могут возникать разные типы ошибок? После того, как я исправил эту проблему, которая оказалась проблемой «времени выполнения», я начал получать ошибки «зависимой компиляции сценария». Теперь все решено, спасибо! - person JoeBrockhaus; 03.02.2016
comment
Еще немного предыстории: изначально это были собственные PS, которые конвертируются (насколько это возможно, на данный момент) в действия рабочего процесса, чтобы запускать их параллельно (по крайней мере, легче, чем запуск новых заданий и опрос для вывода). Поскольку есть несколько из этих модулей Runbook, которые принимают в основном одни и те же наборы параметров, я просто пытался сократить их количество, чтобы уменьшить как можно больше повторяющегося кода :) - person JoeBrockhaus; 03.02.2016