1
我很難從作業中獲得任何輸出 - 以下代碼有什麼問題?從工作中獲得輸出
$test = {
DIR
}
$mjob = Start-Job -ScriptBlock {$test}
while (Get-Job -State Running){}
Receive-Job -Job $mjob -OutVariable $otest
Write-Host($otest)
我很難從作業中獲得任何輸出 - 以下代碼有什麼問題?從工作中獲得輸出
$test = {
DIR
}
$mjob = Start-Job -ScriptBlock {$test}
while (Get-Job -State Running){}
Receive-Job -Job $mjob -OutVariable $otest
Write-Host($otest)
當您使用-OutVariable
供給變量例如爲:
... -OutVariable otest
除非$otest
恰好包含要保存的輸出變量的名稱只有名稱。
其他一些建議。 $test
表示一個腳本塊,因此您無需在其周圍放置{}
。並使用while循環,而不是等待,只使用Wait-Job
例如爲:
$test = { get-childitem }
$job = Start-Job $test
Wait-Job $job
Receive-Job $job -OutVariable otest
$otest
您可以使用管道等待作業完成,然後接收其結果。確保當你通過一個腳本塊的腳本塊參數去除牙套,否則你要創建一個嵌套的腳本塊:
$test = { DIR }
Start-Job -ScriptBlock $test | Wait-Job | Receive-Job
我想修改我的腳本是像你這樣的,它失敗了。經過許多搞亂和逐步改變,我發現在$ job = Start-Job {$ test}周圍放置{}括號會導致它無所作爲 - 或者至少不會返回任何東西(我不知道!)。這似乎與官方的幫助不一致,所以有點混亂。 – RichGK
好的 - 這一定是因爲放大括號意味着你正在放入實際的命令,而沒有大括號是用於引用一個代碼塊的變量? – RichGK
當您指定'Start-Job -Sriptblock {$ test}'時,會創建一個* new * scriptblock,它將評估名爲test的scriptblock內的變量。這將評估爲空,所以你會得不到輸出。 –