Как устранить ошибку при вызове функции через Start-Job? - PullRequest
2 голосов
/ 15 марта 2012

У меня есть файл с именем "build.ps1", в котором доступна функция с именем "Execute-build".

Я вызываю эту функцию из другого файла с именем "Dailybuild.ps1", как показано ниже.

. ./Build.ps1

# starting different jobs (parallel processing)
$job1 = Start-Job { Execute-Build "List.txt" }
$job2 = Start-Job { Execute-Build "List2.txt" }


# synchronizing all jobs, waiting for all to be done
Wait-Job $job1, $job2

# receiving all results
Receive-Job $job1, $job2

# cleanup
Remove-Job $job1, $job2

Но я получаю сообщение об ошибке, как следует

Receive-Job: термин «Execute-Build» не распознается как имя командлета t, function, scriptфайл или работоспособная программа.Проверьте правильность написания имени или, если путь был указан, проверьте правильность пути и повторите попытку.

Почему возникает эта ошибка и как ее устранить?

Ответы [ 2 ]

3 голосов
/ 15 марта 2012

Точечный код не будет доступен в фоновом режиме.

Один из способов решить эту проблему - поместить исходный код Build.ps1 в фоновое задание следующим образом:

$job1 = Start-Job { 
    . "C:\Path\To\Build.ps1"
    Execute-Build "List.txt" 
}

Вы также можете передать путь как параметр:

$path = (Resolve-Path ./Build.ps1).Path
$job1 = Start-Job {
    param ($ScriptPath)
    . "$ScriptPath"
    Execute-Build "List.txt" 
} -ArgumentList $path
2 голосов
/ 15 марта 2012

Start-Job открывает новый экземпляр PowerShell.exe, в котором нет функции Execute-Build. Вам необходимо включить его в script block, а затем вызвать его или использовать параметр -InitializationScript:

$a = { function myfunction {return "whatever!"} }
$job = Start-Job {myfunction} -InitializationScript $a
Get-Job
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...