Вызов функции из 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!"
}

Тем не менее, я не был впечатлен рабочими процессами вообще. Похоже, совершенно бессмысленная особенность, если вы спросите меня. Самая полезная вещь о рабочих процессах - это способность запускать вещи параллельно, но задания тоже могут это делать. Идея, приведенная выше, состоит в том, что вам действительно нужны рабочие процессы:)

Другие вопросы по тегам