run job powershell

job - Equivalente Powershell de bash ampersand(&) para bifurcar/ejecutar procesos en segundo plano



as job powershell (6)

He utilizado la solución descrita aquí http://jtruher.spaces.live.com/blog/cns!7143DA6E51A2628D!130.entry éxito en PowerShell v1.0. Definitivamente será más fácil en PowerShell v2.0.

En bash, el signo & (&) se puede usar para ejecutar un comando en segundo plano y devolver el control interactivo al usuario antes de que el comando haya terminado de ejecutarse. ¿Hay un método equivalente de hacer esto en Powershell?

Ejemplo de uso en bash:

sleep 30 &


Las son algunas respuestas a esta pregunta.

  1. No puedes hacerlo fácilmente en la versión 1
  2. La versión 2 (ahora en la vista previa 2 de tecnología de la comunidad) tiene esta característica, se llama Job (anteriormente PSJob). Encuentre más acerca de esto here o here .
  3. En realidad, puedes hacerlo de la manera difícil en v1, no dudes en hacerlo, pero nunca me he molestado.

Parece que el bloque de script pasado a Start-Job no se ejecuta con el mismo directorio actual que el comando Start-Job , así que asegúrese de especificar la ruta completa si es necesario.

Por ejemplo:

Start-Job { C:/absolute/path/to/command.exe --afileparameter C:/absolute/path/to/file.txt }


Puede usar los cmdlets de trabajos de PowerShell para lograr sus objetivos.

Hay 6 cmdlets relacionados con el trabajo disponibles en PowerShell.

  • Conseguir trabajo
    • Obtiene trabajos de fondo de Windows PowerShell que se ejecutan en la sesión actual
  • Recibir-Trabajo
    • Obtiene los resultados de los trabajos de fondo de Windows PowerShell en la sesión actual
  • Eliminar-Trabajo
    • Elimina un trabajo de fondo de Windows PowerShell
  • Start-Job
    • Inicia un trabajo de fondo de Windows PowerShell
  • Stop-Job
    • Detiene un trabajo en segundo plano de Windows PowerShell
  • Wait-Job
    • Suprime el símbolo del sistema hasta que se completen uno o todos los trabajos de fondo de Windows PowerShell que se ejecutan en la sesión

Si es interesante, puede descargar la muestra Cómo crear trabajos en segundo plano en PowerShell


Siempre que el comando sea un ejecutable o un archivo que tenga un ejecutable asociado, use Start-Process (disponible desde v2):

Start-Process -NoNewWindow ping google.com

También puede agregar esto como una función en su perfil:

function bg() {Start-Process -NoNewWindow @args}

y luego la invocación se convierte en:

bg ping google.com

En mi opinión, Start-Job es una exageración para el caso de uso simple de ejecutar un proceso en segundo plano:

  1. Start-Job no tiene acceso a su alcance actual (porque se ejecuta en una sesión separada). No puede hacer "Start-Job {notepad $ myfile}"
  2. Start-Job no conserva el directorio actual (porque se ejecuta en una sesión separada). No puede hacer "Start-Job {notepad myfile.txt}" donde myfile.txt está en el directorio actual.
  3. La salida no se muestra automáticamente. Necesita ejecutar Receive-Job con la ID del trabajo como parámetro.

NOTA: Con respecto a su ejemplo inicial, "bg sleep 30" no funcionaría porque Sleep es un comando de Powershell. Start-Process solo funciona cuando realmente bifurca un proceso.


ps2> start-job {start-sleep 20}

Todavía no he descubierto cómo obtener la salida estándar en tiempo real, start-job requiere que realice sondeos de rutina con get-job

actualización: no pude empezar a trabajar para hacer fácilmente lo que quiero, que es básicamente el bash y el operador. aquí está mi mejor truco hasta el momento

PS> notepad $profile #edit init script -- added these lines function beep { write-host `a } function ajp { start powershell {ant java-platform|out-null;beep} } #new window, stderr only, beep when done function acjp { start powershell {ant clean java-platform|out-null;beep} } PS> . $profile #re-load profile script PS> ajp