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