我有一个名为“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,功能,脚本文件或可操作程序。检查 拼写名称,或者如果包含路径,请验证路径 是正确的,然后再试一次。
为什么会出现此错误以及如何解决此问题?
答案 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