Я бы порекомендовал немного изучить PowerShell перед тем, как приступить к работе, так как они требуют более глубокого понимания конвейера и того, как PowerShell обрабатывает входы и выходы.
Но вы можете использовать следующее:
$jobToRun = Start-Job -ScriptBlock { #DoStuff }
while ( [Boolean]$( $jobToRun.JobStateInfo.state -ne "Completed" ) )
{
# Do some stuff in script while job is running
}
$results = Receive-Job -Job $jobToRun
Затем, в зависимости от вывода блока скриптов, вы можете проанализировать $results
для того, что вы хотите. Вам также не нужно ждать завершения задания в цикле, но вам нужно иметь способ справиться, если задание не выполнено или занимает много времени. Кроме того, как только вы освоитесь с PowerShell, я настоятельно рекомендую смотреть на пространства выполнения, а не на задания, так как для каждого задания требуется новый экземпляр PowerShell, который может занимать много памяти. Бо Прокс написал отличную статью об их использовании и даже предоставил свой собственный пользовательский модуль, чтобы сделать их похожим на формат рабочих мест.
Также, если вы хотите поместить их в функцию, вы можете просто обернуть Start-Job
/ Receive-Job
внутри нее и установить ее равной переменной. Вам не нужно возвращать выходные данные в PowerShell, поскольку return - это просто способ выхода из функции, сценария или блока сценария, каждый результат операторов внутри функции будет возвращаться из выходных данных функции, и если вы хотите узнать больше о Что означает возврат, вы можете здесь: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_return