Вызов функции из InlineScript
Как я могу вызвать функцию в рабочем процессе из вложенного InlineScript? Следующее вызывает исключение, потому что функция находится вне области видимости в InlineScript:
Workflow test
{
function func1
{
Write-Verbose "test verbose" -verbose
}
InlineScript
{
func1
}
}
test
2 ответа
"Действие inlinescript запускает команды в стандартном сеансе Windows PowerShell без рабочего процесса, а затем возвращает выходные данные в рабочий процесс".
Узнайте больше здесь.
Каждый встроенный скрипт выполняется в новом сеансе PowerShell, поэтому он не имеет никакой видимости функций, определенных в родительском рабочем процессе. Вы можете передать переменную в рабочий процесс, используя $Using:
заявление,
workflow Test
{
$a = 1
# Change the value in workflow scope usin $Using: , return the new value.
$a = InlineScript {$a = $Using:a+1; $a}
"New value of a = $a"
}
Test
PS> New value of a = 2
но не функция или модуль для этого материала.
В прошлом я использовал технику, где я помещал все обычные вещи в файл модуля powershell, и делал:
workflow Hey
{
PrepareMachine
ConfigureIIS
}
function PrepareMachine() {
Import-Module "MyCommonStuff"
CallSomethingBlahBlah()
}
function ConfigureIIS {
Import-Module "MyCommonStuff"
CallSomethingBlahBlah2()
}
Вам даже не нужно оборачивать его в модуль, вы можете просто определить функцию вне рабочего процесса, и она все равно будет работать:
workflow Hey
{
InlineScript {
func1
}
}
function func1 {
Write-Output "Boom!"
}
Тем не менее, я не был впечатлен рабочими процессами вообще. Похоже, совершенно бессмысленная особенность, если вы спросите меня. Самая полезная вещь о рабочих процессах - это способность запускать вещи параллельно, но задания тоже могут это делать. Идея, приведенная выше, состоит в том, что вам действительно нужны рабочие процессы:)