TEMA
    about_Remote_Jobs

DESCRIPCIÓN BREVE
    Describe cómo se ejecutan los trabajos en segundo plano en equipos remotos.

DESCRIPCIÓN DETALLADA
    Un trabajo en segundo plano es un comando que se ejecuta 
    asincrónicamente sin interactuar con la sesión actual. El símbolo 
    del sistema vuelve inmediatamente y se puede continuar usando la 
    sesión mientras se ejecuta el trabajo.

    De forma predeterminada, los trabajos en segundo plano se 
    ejecutan en el equipo local. No obstante, se pueden usar varios 
    procedimientos para ejecutar trabajos en segundo plano en equipos 
    remotos. 

    En este tema se explica cómo se ejecuta un trabajo en segundo 
    plano en un equipo remoto. Para obtener información sobre cómo se 
    ejecutan los trabajos en segundo plano en un equipo local, vea 
    about_Jobs. Para obtener más información sobre los trabajos en 
    segundo plano, vea about_Job_Details.


 TRABAJOS EN SEGUNDO PLANO REMOTOS

    Existen tres métodos para ejecutar trabajos en segundo plano en 
    equipos remotos. 

    -- Puede iniciar una sesión interactiva con un equipo remoto e 
       iniciar un trabajo en la sesión interactiva. Los procedimientos 
       son los mismos que para la ejecución de un trabajo local, si bien 
       todas las acciones se realizan en el equipo remoto.

    -- Puede ejecutar un trabajo en segundo plano en un equipo remoto 
       que devuelve los resultados al equipo local. Utilice este 
       método si desea recopilar los resultados de los trabajos en 
       segundo plano y mantenerlos en una ubicación central en el 
       equipo local.

    -- Puede ejecutar un trabajo en segundo plano en un equipo remoto 
       que mantiene los resultados en el equipo remoto. Utilice este 
       método cuando los datos de los trabajos se mantienen con mayor 
       seguridad en el equipo que los originó.  

 INICIAR UN TRABAJO EN SEGUNDO PLANO EN UNA SESIÓN INTERACTIVA

    Puede iniciar una sesión interactiva con un equipo remoto y, a 
    continuación, iniciar un trabajo en segundo plano durante la 
    sesión interactiva. Para obtener más información sobre las 
    sesiones interactivas, vea about_Remote y Enter-PSSession.

    El procedimiento para iniciar un trabajo en segundo plano durante 
    una sesión interactiva es casi idéntico al procedimiento para 
    iniciar un trabajo en segundo plano en un equipo local. Sin 
    embargo, todas las operaciones se llevan a cabo en el equipo 
    remoto y no en el equipo local.


    PASO 1: ENTER-PSSESSION

    Use el cmdlet Enter-PSSession para iniciar una sesión interactiva 
    con un equipo remoto. Puede utilizar el parámetro ComputerName de 
    Enter-PSSession a fin de establecer una conexión temporal para la 
    sesión interactiva. O bien, puede usar el parámetro Session para 
    ejecutar la sesión interactiva en una sesión de Windows 
    PowerShell (PSSession). 

    El siguiente comando inicia una sesión interactiva en el equipo 
    Servidor01.
  
        C:\PS> Enter-PSSession -computername Servidor01

    El símbolo del sistema cambia para indicar que se ha conectado al 
    equipo Servidor01.

        Servidor01\C:>


    PASO 2: START-JOB

    Utilice el cmdlet Start-Job para iniciar un trabajo en segundo 
    plano en la sesión.

    El comando siguiente ejecuta un trabajo en segundo plano que 
    obtiene los eventos del registro de eventos de Windows PowerShell 
    en el equipo Servidor01. El cmdlet Start-Job devuelve un objeto 
    que representa el trabajo. 

    Este comando guarda el objeto de trabajo en la variable $job. 

        Servidor01\C:> $job = start-job -scriptblock {get-eventlog "Windows PowerShell"}
   
    Mientras se ejecuta el trabajo, puede utilizar la sesión 
    interactiva para ejecutar otros comandos, incluidos otros 
    trabajos en segundo plano. Sin embargo, debe mantener abierta la 
    sesión interactiva hasta que se complete el trabajo. Si finaliza 
    la sesión, se interrumpirá el trabajo y se perderán los resultados.



    PASO 3: GET-JOB

    Para comprobar si se ha completado el trabajo, debe mostrar el 
    valor de la variable $job o utilizar el cmdlet Get-Job para 
    obtener el trabajo. El comando siguiente usa el cmdlet Get-Job 
    para mostrar el trabajo.

        Servidor01\C:> get-job $job

        SessionId  Name  State      HasMoreData  Location    Command
        ---------  ----  -----      -----------  --------   -------
        1          Job1  Complete   True         localhost   get-eventlog "Windows PowerShell"

   
    El resultado de Get-Job indica que el trabajo se está ejecutando 
    en el equipo "localhost" porque se inició y se ejecuta en el 
    mismo equipo (en este caso, Servidor01).
    


    PASO 4: RECEIVE-JOB

    Para obtener los resultados del trabajo, use el cmdlet 
    Receive-Job. Puede mostrar los resultados en la sesión 
    interactiva o guardarlos en un archivo ubicado en el equipo 
    remoto. El comando siguiente obtiene los resultados del trabajo 
    en la variable $job. El comando utiliza el operador de 
    redirección (>) para guardar los resultados del trabajo en el 
    archivo PsLog.txt ubicado en el equipo Servidor01.

        Servidor01\C:> receive-job $job > c:\logs\PsLog.txt



    PASO 5: EXIT-PSSESSION

    Para finalizar la sesión interactiva, utilice el cmdlet 
    Exit-PSSession. El símbolo del sistema cambia para indicar que 
    está de nuevo en la sesión original en el equipo local.

        Servidor01\C:> Exit-PSSession
        C:\PS>
         


    PASO 6: INVOKE-COMMAND: GET CONTENT
     
    Para ver el contenido del archivo PsLog.txt ubicado en el equipo 
    Servidor01, inicie otra sesión interactiva o ejecute un comando 
    remoto. Se recomienda ejecutar este tipo de comando en una 
    PSSession (conexión persistente) en caso de que desee utilizar 
    varios comandos para investigar y administrar los datos del 
    archivo PsLog.txt. Para obtener más información sobre las 
    PSSessions, vea about_PSSessions.

    Los comandos siguientes utilizan el cmdlet New-PSSession para 
    crear una PSSession que está conectada al equipo Servidor01 y 
    usan el cmdlet Invoke-Command para ejecutar un comando 
    Get-Content en la PSSession para ver el contenido del archivo.

        C:\PS> $s = new-pssession -computername Servidor01
        C:\PS> invoke-command -session $s -scriptblock {get-content c:\logs\pslog.txt}


       
 INICIAR UN TRABAJO REMOTO QUE DEVUELVE LOS RESULTADOS AL EQUIPO LOCAL (ASJOB)

    Para iniciar un trabajo en segundo plano en un equipo remoto que 
    devuelve los resultados de los comandos al equipo local, utilice 
    el parámetro AsJob de un cmdlet, como el cmdlet Invoke-Command. 

    Cuando se utiliza el parámetro AsJob, el objeto de trabajo se 
    crea en el equipo local, aunque el trabajo se ejecute en el 
    equipo remoto. Cuando se completa el trabajo, se devuelven los 
    resultados al equipo local. 

    Puede utilizar los cmdlets que contienen el sustantivo Job 
    (cmdlets Job) para administrar los trabajos creados por los 
    cmdlets. Muchos de los cmdlets que tienen parámetros AsJob no 
    utilizan la comunicación remota de Windows PowerShell, por lo que 
    puede utilizarlos incluso en los equipos que no estén 
    configurados para la comunicación remota y no cumplan los 
    requisitos referentes a la comunicación remota.
 

    PASO 1: INVOKE-COMMAND -ASJOB

    El comando siguiente utiliza el parámetro AsJob de Invoke-Command 
    para iniciar un trabajo en segundo plano en el equipo Servidor01. 
    El trabajo ejecuta un comando Get-Eventlog que obtiene los 
    eventos del registro del sistema. Puede utilizar el parámetro 
    JobName si desea asignar un nombre para mostrar al trabajo.

       invoke-command -computername Servidor01 -scriptblock {get-eventlog system} -asjob 

    Los resultados del comando son similares a los que figuran a continuación.


       SessionId   Name    State      HasMoreData     Location    Command
       ---------   ----    -----      -----------     --------    -------
       1           Job1    Running    True            Servidor01  get-eventlog system

    Cuando se utiliza el parámetro AsJob, Invoke-Command devuelve el 
    mismo tipo de objeto que Start-Job. Puede guardar el objeto de 
    trabajo en una variable o utilizar un comando Get-Job para 
    obtener el trabajo.

    Observe que el valor de la propiedad Location indica que el 
    trabajo se ejecutó en el equipo Servidor01.  


    PASO 2: GET-JOB

    Para administrar un trabajo que se inició mediante el parámetro 
    AsJob del cmdlet Invoke-Command, utilice los cmdlet Job. Dado que 
    el objeto de trabajo que representa el trabajo remoto está en el 
    equipo local, no es necesario ejecutar comandos remotos para 
    administrar el trabajo.  

    Para determinar si el trabajo se ha completado, utilice un 
    comando Get-Job. El comando siguiente obtiene todos los trabajos 
    que se iniciaron en la sesión actual. 

        get-job

    Dado que el trabajo remoto se inició en la sesión actual, un 
    comando Get-Job local obtiene el trabajo. La propiedad State del 
    objeto de trabajo indica que el comando se ejecutó correctamente.
       
       SessionId   Name   State      HasMoreData     Location   Command
       ---------   ----   -----      -----------     --------   -------
       1           Job1   Completed  True            Servidor01 get-eventlog system



    PASO 3: RECEIVE-JOB

    Para obtener los resultados del trabajo, use el cmdlet 
    Receive-Job. Dado que los resultados del trabajo se devuelven 
    automáticamente al equipo donde reside el objeto de trabajo, 
    puede obtener los resultados mediante un comando Receive-Job local.

    El comando siguiente utiliza el cmdlet Receive-Job para obtener 
    los resultados del trabajo. Utiliza el identificador de sesión 
    para identificar el trabajo. Este comando guarda los resultados 
    del trabajo en la variable $results. Asimismo, puede redirigir 
    los resultados a un archivo.

       $results = receive-job -id 1
    


 INICIAR UN TRABAJO REMOTO QUE MANTIENE LOS RESULTADOS EN EL EQUIPO REMOTO

    Para iniciar un trabajo en segundo plano en un equipo remoto que 
    mantiene los resultados de los comandos en el equipo remoto, 
    utilice el cmdlet Invoke-Command para ejecutar un comando 
    Start-Job en un equipo remoto. Puede utilizar este método para 
    ejecutar trabajos en segundo plano en varios equipos.

    Cuando se ejecuta de forma remota un comando Start-Job, el objeto 
    de trabajo se crea en el equipo remoto y los resultados del 
    trabajo se mantienen en el equipo remoto.
    Desde el punto de vista del trabajo, todas las operaciones son 
    locales. Simplemente se ejecutan los comandos de forma remota 
    para administrar un trabajo local en el equipo remoto.


    PASO 1: INVOKE-COMMAND START-JOB

    Use el cmdlet Invoke-Command para ejecutar un comando Start-Job 
    en un equipo remoto. 

    Este comando requiere una PSSession (conexión persistente). Si 
    utiliza el parámetro ComputerName de Invoke-Command para 
    establecer una conexión temporal, se considera que el comando 
    Invoke-Command se ha completado cuando se devuelve el objeto de 
    trabajo. Como resultado, se cierra la conexión temporal y se 
    cancela el trabajo.
 
    El siguiente comando utiliza el cmdlet New-PSSession para crear 
    una PSSession que está conectada al equipo Servidor01. El comando 
    guarda la PSSession en la variable $s.

        $s = new-pssession -computername Servidor01


    El siguiente comando utiliza el cmdlet Invoke-Command para 
    ejecutar un comando Start-Job en la PSSession. Los comandos 
    Start-Job y Get-Eventlog están entre llaves.

       invoke-command -session $s -scriptblock {start-job -scriptblock {get-eventlog system}}

    Los resultados son similares a los que figuran a continuación.


       Id       Name    State      HasMoreData     Location   Command
       --       ----    -----      -----------     --------   -------
       2        Job2    Running    True            Localhost  get-eventlog system

    Cuando se ejecuta de forma remota un comando Start-Job, 
    Invoke-Command devuelve el mismo tipo de objeto de trabajo que 
    Start-Job. Puede guardar el objeto de trabajo en una variable o 
    utilizar un comando Get-Job para obtener el trabajo.

    Observe que el valor de la propiedad Location indica que el 
    trabajo se ejecutó en el equipo local, denominado "LocalHost", 
    aunque el trabajo se ejecutó en el equipo Servidor01. Dado que el 
    objeto de trabajo se crea en el equipo Servidor01 y el trabajo se 
    ejecuta en el mismo equipo, se considera que se trata de un 
    trabajo en segundo plano local.  


    PASO 2: INVOKE-COMMAND GET-JOB

    Para administrar un trabajo en segundo plano remoto, utilice los 
    cmdlets Job. Dado que el objeto de trabajo está en el equipo 
    remoto, deberá ejecutar comandos remotos para obtener, detener, 
    aguardar o recuperar los resultados del trabajo.  

    Para comprobar si se ha completado el trabajo, utilice un comando 
    Invoke-Command para ejecutar un comando Get-Job en la PSSession 
    conectada al equipo Servidor01.

        invoke-command -session $s -scriptblock {get-job}

    El comando devuelve un objeto de trabajo. La propiedad State del 
    objeto de trabajo indica que el comando se ejecutó correctamente.


       SessionId       Name    State      HasMoreData     Location   Command
       ---------       ----    -----      -----------     --------   -------
       2               Job2    Completed  True            LocalHost  get-eventlog system


    PASO 3: INVOKE-COMMAND RECEIVE-JOB

    Para obtener los resultados del trabajo, utilice el cmdlet 
    Invoke-Command para ejecutar un comando Receive-Job en la 
    PSSession conectada al equipo Servidor01.

    El comando siguiente utiliza el cmdlet Receive-Job para obtener 
    los resultados del trabajo. Utiliza el identificador de sesión 
    para identificar el trabajo. Este comando guarda los resultados 
    del trabajo en la variable $results. Utiliza el parámetro Keep de 
    Receive-Job para mantener el resultado en la memoria caché de 
    trabajos del equipo remoto.

        $results = invoke-command -session $s -scriptblock {receive-job -sessionid 2 -keep}

    También puede redirigir los resultados a un archivo en el equipo 
    local o remoto. El comando siguiente utiliza un operador de 
    redirección para guardar los resultados en un archivo ubicado en 
    el equipo Servidor01.

        invoke-command -session $s -command {receive-job -sessionid 2 > c:\logs\pslog.txt}


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




Tabla de contenido