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