2009-11-12 20 views
5

Estoy tratando de hacer trabajos de fondo básicos en PowerShell 2.0, y estoy viendo cosas diferentes con start-job y invoke-command -asjob.Start-job vs. Invoke-command -asjob

Si hago esto:

start-job -scriptblock {get-process}

Puedo obtener un objeto de trabajo, pero el trabajo infantil (que se crea automáticamente mediante la puesta en trabajo) siempre tiene una JobStateInfo de "NotStarted".

esto, sin embargo, funciona como se espera:

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

me he encontrado el enable-psremoting .... nada más que tenga que hacer para conseguir trabajos en segundo plano de trabajo?

Respuesta

4

El primer ejemplo que usa start-job no usa HTTP para la llamada y en su lugar utiliza un canal IPC con WinRM para ejecutarse; no requiere privilegios administrativos de esta manera. El segundo ejemplo con invoke-command requiere derechos de administrador (por defecto) y se conectará a través de HTTP y WinRM.

Para ser sincero, hubiera esperado que la segunda fallara para la mayoría de las personas. Si ejecuta: Receive-Job contra el ID de la invocación de inicio de trabajo, ¿recibe algún mensaje de error?

-Oisin

+0

No, simplemente no devuelve nada (lo que esperaría dado que el trabajo secundario aún no se inicia). –

+0

BTW ... es bueno saber que funcionan de manera diferente internamente. Aún no explica por qué el trabajo inicial no funciona, pero al menos no estoy loco. –

0

para recibir una actualización JobStateInfo tendrá que utilizar Get-Job y el trabajo creado por Start-Job. Sin embargo, si usa esta información para ver cuándo finaliza el trabajo, Wait-Job o Receive-Job -wait podrían adaptarse mejor a sus necesidades.

Wait-Job simplemente espera hasta que el trabajo o la lista de trabajos indicados haya finalizado antes de continuar. Receive-Job -wait hace lo mismo, pero también recopila los resultados/resultados del trabajo.

Cuestiones relacionadas