2012-03-15 136 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 
相關問題