2012-03-15 135 views
2

我有一个名为“build.ps1”的文件,其中有一个名为“Execute-build”的函数可用。如何通过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 

但我收到错误,如以下

接收-工作:术语“执行 - 建造”不被识别为名称的cmdle T,函数,脚本文件或可操作的 程序。检查名称的拼写,或者如果包含路径,请确认路径 是正确的,然后重试。

为什么会发生此错误以及如何解决此问题?

回答

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 
相关问题