не получаю вывод из задания на получение

Переменная $var пуста, когда я запускаю этот скрипт:

function FOO { write-output "HEY" }

$var = Start-Job -ScriptBlock { ${function:FOO} } | Wait-Job | Receive-Job

$var

Как получить вывод из задания-получения?


person red888    schedule 25.08.2016    source источник


Ответы (1)


Start-Job порождает новый экземпляр PowerShell в фоновом режиме и поэтому ничего не знает о вашей функции FOO, которая определена в вашем исходном экземпляре.

Существует дополнительный параметр InitializationScript, который вызывается предварительным выполнением вашего блока сценария в новом экземпляре, который вы можете использовать для определения FOO следующим образом.

$var = Start-Job -InitializationScript { function FOO { write-output "HEY" } } -ScriptBlock ...  

Кстати: я думаю, вы хотите выполнить функцию вместо того, чтобы получать сам объект функции, поэтому вы можете изменить свой блок сценария на этот

-ScriptBlock { FOO }  
person DAXaholic    schedule 25.08.2016
comment
Я запутался, у меня есть куча функций в отдельных файлах с точками в одном основном файле, как мне вызвать функции с точками в основном файле? - person red888; 25.08.2016
comment
Вам нужно будет снова импортировать/использовать необходимые функции в этом задании, например, через блок сценария инициализации, как показано выше. - person DAXaholic; 25.08.2016
comment
А, я попробую, есть ли разница между точечным поиском и выполнением ${function:myfunc} внутри блока скрипта? - person red888; 25.08.2016
comment
Да, это совсем другое - ${function:myfunc}фактически вы получаете функциональный объект (блок скрипта) самого myfunc, тогда как точечный поиск файла скрипта по существу обрабатывает содержимое файла скрипта в вашей области видимости, которая может определять, среди прочего, функцию myfunc. Так что это принципиально разные вещи - возможно, я тоже неправильно понял ваш вопрос :) - person DAXaholic; 25.08.2016