2012-10-15 23 views
1

我很難從作業中獲得任何輸出 - 以下代碼有什麼問題?從工作中獲得輸出

$test = { 
    DIR 
} 

$mjob = Start-Job -ScriptBlock {$test} 
while (Get-Job -State Running){} 
Receive-Job -Job $mjob -OutVariable $otest 

Write-Host($otest) 

回答

5

當您使用-OutVariable供給變量例如爲:

... -OutVariable otest 

除非$otest恰好包含要保存的輸出變量的名稱只有名稱。

其他一些建議。 $test表示一個腳本塊,因此您無需在其周圍放置{}。並使用while循環,而不是等待,只使用Wait-Job例如爲:

$test = { get-childitem } 
$job = Start-Job $test 
Wait-Job $job 
Receive-Job $job -OutVariable otest 

$otest 
+0

我想修改我的腳本是像你這樣的,它失敗了。經過許多搞亂和逐步改變,我發現在$ job = Start-Job {$ test}周圍放置{}括號會導致它無所作爲 - 或者至少不會返回任何東西(我不知道!)。這似乎與官方的幫助不一致,所以有點混亂。 – RichGK

+0

好的 - 這一定是因爲放大括號意味着你正在放入實際的命令,而沒有大括號是用於引用一個代碼塊的變量? – RichGK

+2

當您指定'Start-Job -Sriptblock {$ test}'時,會創建一個* new * scriptblock,它將評估名爲test的scriptblock內的變量。這將評估爲空,所以你會得不到輸出。 –

4

您可以使用管道等待作業完成,然後接收其結果。確保當你通過一個腳本塊的腳本塊參數去除牙套,否則你要創建一個嵌套的腳本塊:

$test = { DIR } 
Start-Job -ScriptBlock $test | Wait-Job | Receive-Job