TEMA
  about_Job_Details

DESCRIPCIÓN BREVE
  Proporciona detalles sobre los trabajos de segundo plano en los 
  equipos locales y remotos.
    
DESCRIPCIÓN DETALLADA
   En este tema se explica el concepto de trabajo de segundo plano y se 
   proporciona información técnica sobre cómo funcionan los trabajos de 
   segundo plano en Windows PowerShell.

   Este tema complementa los temas about_Jobs y about_Remote_Jobs.

   Importante: los trabajos de segundo plano que se inician mediante 
               Start-Job o el parámetro AsJob de Invoke-Command se basan en la 
               infraestructura de comunicación remota de Windows PowerShell. Para 
               usar estas características, Windows PowerShell debe estar 
               configurado para la comunicación remota, aunque el trabajo de 
               segundo plano se ejecute solamente en el equipo local. Para obtener 
               más información, vea about_Remote_Requirements.


 TRABAJOS DE SEGUNDO PLANO
    Un trabajo de segundo plano ejecuta un comando o una expresión de 
    manera asincrónica. Estos trabajos pueden ejecutar un cmdlet, una 
    función, un script o cualquier otra tarea basada en comandos. Se 
    han diseñado para ejecutar comandos que tarden un período 
    prolongado de tiempo, pero se pueden utilizar para ejecutar 
    cualquier comando en segundo plano.

    Cuando se ejecuta un comando sincrónico, se suprime el símbolo 
    del sistema de Windows PowerShell hasta que el comando se 
    completa. Sin embargo, un trabajo de segundo plano no suprime el 
    indicador de Windows PowerShell. Un comando que inicia un trabajo 
    de segundo plano devuelve un objeto de trabajo. El símbolo del 
    sistema vuelve a mostrarse inmediatamente, a fin de permitir que 
    se trabaje en otras tareas mientras se ejecuta el trabajo de 
    segundo plano.
  
    Sin embargo, cuando se inicia un trabajo de segundo plano no se 
    obtienen los resultados inmediatamente, aunque el trabajo se 
    ejecute en seguida. El objeto de trabajo que se devuelve contiene 
    información útil sobre el trabajo, pero no sus resultados. Es 
    preciso ejecutar un comando independiente para obtener los 
    resultados del trabajo. También se pueden ejecutar comandos para 
    detener el trabajo, esperar a que se complete o eliminarlo.

    Para que el control de tiempo de un trabajo de segundo plano sea 
    independiente de los demás comandos, cada uno de ellos se ejecuta 
    en su propio entorno de Windows PowerShell (una "sesión"). Sin 
    embargo, esta puede ser una conexión temporal que se crea 
    solamente para ejecutar el trabajo y se destruye a continuación, 
    o bien puede ser una sesión persistente (PSSession) que se puede 
    utilizar para ejecutar varios trabajos o comandos relacionados.


 UTILIZAR CMDLETS JOB
    Un comando Start-Job se utiliza para iniciar un trabajo de 
    segundo plano en un equipo local. Start-Job devuelve un objeto de 
    trabajo. También se pueden obtener objetos que representan los 
    trabajos que se han iniciado en el equipo local mediante el 
    cmdlet Get-Job.

    Para obtener los resultados del trabajo, se utiliza un comando 
    Receive-Job. Si el trabajo no se ha completado, Receive-Job devuelve 
    resultados parciales. También se puede utilizar cmdlet Wait-Job para 
    suprimir el símbolo del sistema hasta que se hayan completado uno o 
    todos los trabajos iniciados en la sesión.

    Para detener un trabajo de segundo plano, se utiliza el cmdlet 
    Stop-Job. Para eliminar un trabajo, se utiliza el cmdlet Remove-Job.

    Para obtener más información sobre cómo funcionan los cmdlets, 
    vea el tema de Ayuda correspondiente a cada cmdlet y about_Jobs.

 
 INICIAR TRABAJOS DE SEGUNDO PLANO EN EQUIPOS REMOTOS
    Se pueden crear y administrar trabajos de segundo plano en un 
    equipo local o remoto. Para ejecutar un trabajo de segundo plano 
    remotamente, se utiliza el parámetro AsJob de un cmdlet, como 
    Invoke-Command, o bien el cmdlet Invoke-Command para ejecutar 
    remotamente un comando Start-Job. También se puede iniciar un 
    trabajo de segundo plano en una sesión interactiva.

    Para obtener más información sobre trabajos de segundo plano 
    remotos, vea about_Remote_Jobs.


 TRABAJOS SECUNDARIOS
    Cada trabajo de segundo plano está compuesto de un trabajo 
    primario y uno o más trabajos secundarios. En los trabajos 
    iniciados mediante Start-Job o el parámetro AsJob de 
    Invoke-Command, el trabajo primario es un ejecutivo. No ejecuta 
    ningún comando o ni devuelve resultados. En realidad, son los trabajos 
    secundarios los que ejecutan los comandos. (Los trabajos iniciados 
    mediante otros cmdlets podrían funcionar de manera diferente.)

    Los trabajos secundarios se almacenan en la propiedad ChildJobs 
    del objeto de trabajo primario. La propiedad ChildJobs puede 
    contener uno o varios objetos de trabajo secundarios. Los objetos 
    de trabajo secundarios tienen un nombre, un identificador y un 
    identificador de instancia, que son distintos del trabajo 
    primario, para permitir la administración de los trabajos primarios y 
    secundarios de manera individual o como una unidad.

    Para ver los trabajos primarios y secundarios de un trabajo, se 
    utiliza el cmdlet Get-Job para obtener el trabajo primario y, a 
    continuación, se canalice el trabajo a un comando Format-List que 
    muestra las propiedades ChildJobs y Name de los objetos, como se 
    muestra en el comando siguiente.

        C:\PS> get-job | format-list -property Name, ChildJobs

        Name          : Job1
        ChildJobs     : {Job2}


    También se puede utilizar un comando Get-Job en el trabajo 
    secundario, como se muestra en el comando siguiente:

        C:\PS> get-job job2

        Id    Name   State      HasMoreData   Location    Command
        --    ----   -----      -----------   --------    -------
        2     Job2   Completed  True          localhost   get-process


    La configuración del trabajo secundario depende del comando que 
    se utiliza para iniciar el trabajo.

       -- Si se utiliza Start-Job para iniciar un trabajo en un 
          equipo local, el trabajo está compuesto de un trabajo 
          primario ejecutivo y un trabajo secundario que ejecuta el 
          comando.

       -- Si se utiliza el parámetro AsJob de Invoke-Command para 
          iniciar un trabajo en uno o más equipos, el trabajo está 
          compuesto de un trabajo primario ejecutivo y un trabajo 
          secundario por cada trabajo ejecutado en cada equipo.

       -- Si se utiliza Invoke-Command para ejecutar un comando 
          Start-Job en uno o más equipos remotos, el resultado es 
          igual que si se ejecutara un comando local en cada equipo 
          remoto. El comando devuelve un objeto de trabajo por cada 
          equipo. El objeto de trabajo está compuesto de un trabajo 
          primario ejecutivo y un trabajo secundario que ejecuta el 
          comando.
    
    El trabajo primario representa todos los trabajos secundarios. Al 
    administrar un trabajo primario, también se administran los trabajos 
    secundarios asociados. Por ejemplo, si se detiene un trabajo 
    primario, se detienen todos los trabajos secundarios. Si se obtienen 
    los resultados de un trabajo primario, se obtienen los resultados 
    de todos los trabajos secundarios.

    Sin embargo, también se pueden administrar individualmente los 
    trabajos secundarios. Esto resulta de gran utilidad cuando se 
    desea investigar un problema con un trabajo u obtener los 
    resultados de uno solo de los diversos trabajos secundarios 
    iniciados mediante el parámetro AsJob de Invoke-Command. (El 
    carácter de acento grave [`] es el carácter de continuación.)

    El comando siguiente utiliza el parámetro AsJob de Invoke-Command 
    para iniciar trabajos de segundo plano en el equipo local y en 
    dos equipos remotos. El comando guarda el trabajo en la variable $j.

        C:\PS> $j = invoke-command -computername localhost, Server01, Server02 `
               -command {get-date} -AsJob

    Al mostrar las propiedades ChildJob y Name del trabajo en $j, se 
    ve que el comando devolvió un objeto de trabajo con tres trabajos 
    secundarios, uno por cada equipo.

        C:\PS> $j | format-list name, childjobs

        Name   : Job3
        ChildJobs : {Job4, Job5, Job6}


    Al mostrar el trabajo primario, se ve que se ha producido un 
    error en el trabajo.

        C:\PS> $j

        Id   Name    State   HasMoreData     Location             Command
        --   ----    -----   -----------     --------             -------
        1    Job3    Failed  True            localhost,server... get-date


    Sin embargo, cuando se ejecuta un comando Get-Job en cada uno de 
    los trabajos secundarios, se ve que solamente se ha producido el 
    error en uno de ellos.

        PS C:\ps-test> get-job job4, job5, job6

        Id   Name   State      HasMoreData     Location           Command
        --   ----   -----      -----------     --------           -------
        4    Job4   Completed  True            localhost          get-date
        5    Job5   Failed     False           Server01           get-date
        6    Job6   Completed  True            Server02           get-date


    
    Para obtener los resultados de todos los trabajos secundarios, 
    se utiliza el cmdlet Receive-Job para obtener los resultados del 
    trabajo primario. Sin embargo, también se pueden obtener los 
    resultados de un trabajo secundario determinado, como se muestra 
    en el comando siguiente.

        C:\PS> receive-job -job6 -keep | format-table ComputerName, DateTime -auto

        ComputerName DateTime
        ------------ --------
        Server02   Jueves, 13 de marzo de 2008 4:16:03 p.m.

    La característica de trabajos secundarios de los trabajos de 
    segundo plano de Windows PowerShell proporciona un mayor control 
    sobre los trabajos que se ejecutan.


VEA TAMBIÉN
    about_Jobs
    about_Remote_Jobs
    about_Remote
    Invoke-Command
    Start-Job
    Get-Job
    Wait-Job
    Stop-Job
    Remove-Job
    New-PSSession
    Enter-PSSession
    Exit-PSSession




Tabla de contenido