Я чешу в затылке, пытаясь понять, почему разделение параметров не работает для набора модулей 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
child @splatter
, а неchild $splatter
- person Mathias R. Jessen   schedule 29.01.2016