작업에서 출력을 얻는 데 비참하게 실패합니다. 다음 코드에 어떤 문제가 있습니까?작업에서 출력 얻기
$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
당신은 완료하고 그 결과를 수신하는 작업을 기다리는 파이프 라인을 사용할 수 있습니다 사용합니다. 그렇지 않으면 당신은 중첩 된 스크립트 블록을 만들, 당신은 ScriptBlock 매개 변수에 스크립트 블록을 통과 할 때 괄호를 제거해야합니다 :
$test = { DIR }
Start-Job -ScriptBlock $test | Wait-Job | Receive-Job
내가 당신처럼 내 스크립트를 편집 할 시도하고 실패했습니다. 많은 엉망진창과 스텝 바이 스텝 변경 후에 $ job = Start-Job {$ test}에 {} 괄호를 두는 것만으로 아무 일도 일어나지 않거나 적어도 아무것도 반환하지 않는다는 것을 알았다. 이것은 공식적인 도움과는 확연히 다르기 때문에 조금 혼란 스럽습니다. – RichGK
Ok - 중괄호를 넣는 것은 실제 명령을 넣고 중괄호를 사용하지 않고 코드 블록을 참조하는 변수를 사용하기 때문에 가능해야합니다. – RichGK
'Start-Job -Sriptblock {$ test}'를 지정하면 * 새로운 * scriptblock이 생성되고 test라는 스크립트 블록 안에있는 변수를 평가하게됩니다. 그건 null로 평가 될 것이므로 출력을 얻지 못할 것입니다. –