2012-03-15 7 views
2

У меня есть файл с именем «build.ps1», где есть функция «Выполнение-сборка».Как решить ошибку при вызове функции через Start-Job?

Я вызываю эту функцию из другого файла с именем «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-Билд» не признается в качестве имени из cmdle т, функции, файла сценария или действующий программа. Проверьте написание имени имени или если был указан путь, убедитесь, что путь верен и повторите попытку.

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

ответ

3

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

Одним из способов решения этой проблемы является точка источника 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

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

$a = { function myfunction {return "whatever!"} } 
$job = Start-Job {myfunction} -InitializationScript $a 
Get-Job 
Смежные вопросы