2012-10-15 2 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

Ok - 중괄호를 넣는 것은 실제 명령을 넣고 중괄호를 사용하지 않고 코드 블록을 참조하는 변수를 사용하기 때문에 가능해야합니다. – RichGK

+2

'Start-Job -Sriptblock {$ test}'를 지정하면 * 새로운 * scriptblock이 생성되고 test라는 스크립트 블록 안에있는 변수를 평가하게됩니다. 그건 null로 평가 될 것이므로 출력을 얻지 못할 것입니다. –

4

당신은 완료하고 그 결과를 수신하는 작업을 기다리는 파이프 라인을 사용할 수 있습니다 사용합니다. 그렇지 않으면 당신은 중첩 된 스크립트 블록을 만들, 당신은 ScriptBlock 매개 변수에 스크립트 블록을 통과 할 때 괄호를 제거해야합니다 :

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