Не получает вывод от получения работы

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

function FOO { write-output "HEY" }

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

$var

Как я могу получить вывод от receive-job?

1 ответ

Решение

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

Есть дополнительный параметр InitializationScript который вызывается заранее, выполняя ваш блок скрипта в новом экземпляре, который вы можете использовать для определения FOO вот так

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

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

-ScriptBlock { FOO }  
Другие вопросы по тегам