2009-11-12 4 views
5

PowerShell 2.0에서 기본 백그라운드 작업을 수행하려고하는데 start-job 및 invoke-command -asjob에서 다른 작업이 표시됩니다.Start-job 대 Invoke-command -assjob

내가 할 경우이 :

start-job -scriptblock {get-process}

내가 작업 개체를 얻을 수 있지만 (시작 - 작업에 의해 자동으로 생성됩니다) 자식 작업이 항상 "NotStarted"의 JobStateInfo 있습니다.

invoke-command -scriptblock {get-process} -computer localhost -asjob

는 내가 수-psremoting .... 내가 작업 백그라운드 작업을 얻기 위해해야 ​​할 다른 작업을 실행했습니다 :

이, 그러나 예상대로 작동?

답변

4

start-job을 사용하는 첫 번째 예에서는 호출에 HTTP를 사용하지 않고 대신 WinRM과 함께 IPC 채널을 사용하여 실행합니다. 이 방법으로 관리자 권한이 필요하지 않습니다. invoke-command를 사용하는 두 번째 예제에는 관리자 권한이 필요하며 (기본값) HTTP 및 WinRM을 통해 연결됩니다.

솔직히 말해서, 나는 두 번째 것이 대부분의 사람들에게 실패 할 것이라고 예상했을 것입니다. 다음을 실행하는 경우 : 시작 작업 호출 ID에 대한 Receive-Job, 오류 메시지가 있습니까?

+0

아니요, 아무 것도 반환하지 않습니다 (자식 작업이 아직 시작되지 않았다고 가정 할 경우). –

+0

BTW ... 내부적으로 다르게 작동한다는 것을 알고있는 것이 좋습니다. 아직도 일자리가 잘 안되는 이유는 모르겠지만 적어도 미친 것은 아닙니다. –

0

-Oisin는 당신이 얻을 - 작업 및 시작 - 작업에 의해 생성 된 작업을 사용해야합니다 업데이트 JobStateInfo를받을 수 있습니다. 하지만이 정보를 사용하여 작업 완료 시점을 확인한 경우 Wait-Job 또는 Receive-Job-wait가 사용자의 요구에 더 적합 할 수 있습니다.

Wait-Job은 작업 또는 작업 목록이 완료 될 때까지 기다렸다가 계속 이동합니다. Receive-Job-wait는 동일한 작업을 수행하지만 작업 결과/결과도 수집합니다.