如何通过Start-Job调用函数来解决错误?

时间:2012-03-15 06:41:07

标签: powershell powershell-v2.0

我有一个名为“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

但我收到的错误如下

  

接收作业:术语“执行 - 构建”不被识别为名称   cmdle,功能,脚本文件或可操作程序。检查   拼写名称,或者如果包含路径,请验证路径   是正确的,然后再试一次。

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

Start-Job打开PowerShell.exe的新实例,该实例没有您的Execute-Build功能。您需要将其包含在script block中,然后调用它或使用-InitializationScript参数:

$a = { function myfunction {return "whatever!"} }
$job = Start-Job {myfunction} -InitializationScript $a
Get-Job