Переменная $var пуста, когда я запускаю этот скрипт:
function FOO { write-output "HEY" }
$var = Start-Job -ScriptBlock { ${function:FOO} } | Wait-Job | Receive-Job
$var
Как получить вывод из задания-получения?
Переменная $var пуста, когда я запускаю этот скрипт:
function FOO { write-output "HEY" }
$var = Start-Job -ScriptBlock { ${function:FOO} } | Wait-Job | Receive-Job
$var
Как получить вывод из задания-получения?
Start-Job
порождает новый экземпляр PowerShell в фоновом режиме и поэтому ничего не знает о вашей функции FOO
, которая определена в вашем исходном экземпляре.
Существует дополнительный параметр InitializationScript
, который вызывается предварительным выполнением вашего блока сценария в новом экземпляре, который вы можете использовать для определения FOO
следующим образом.
$var = Start-Job -InitializationScript { function FOO { write-output "HEY" } } -ScriptBlock ...
Кстати: я думаю, вы хотите выполнить функцию вместо того, чтобы получать сам объект функции, поэтому вы можете изменить свой блок сценария на этот
-ScriptBlock { FOO }
${function:myfunc}
фактически вы получаете функциональный объект (блок скрипта) самого myfunc
, тогда как точечный поиск файла скрипта по существу обрабатывает содержимое файла скрипта в вашей области видимости, которая может определять, среди прочего, функцию myfunc
. Так что это принципиально разные вещи - возможно, я тоже неправильно понял ваш вопрос :)
- person DAXaholic; 25.08.2016