Los objetivos de automatizar procesos, son los de facilitar tus tareas cotidianas y repetitivas. Podemos automatizar los procesos de forma que no sea necesario realizar las acciones de forma manual.
PowerShell por eso, tiene un inconveniente en este punto. Cuando se inicia una secuencia de comandos PowerShell, pueden necesitar de un tiempo determinado para su finalización, si además realizamos las tareas sobre maquinas remotas, como vimos en el anterior post “basics”, el tiempo puede aumentar. Su pompt de powerShell no estará disponible hasta la finalización de las mismas. Una forma de solucionar este problema es utilizar varios prompt PowerShell o lanzar los procesos en Background, como Job.
Los trabajos en PowerShell se ejecutan de forma asíncrona. Cabe tener en cuenta, que los resultados no son persistentes, con lo cual, si cerramos una sesión con un Job, los datos del mismo se perderán.
Podemos crear Jobs de dos formas:
Cmdlets Jobs
Cmdlets específicos para la generación de trabajos. Podemos ver un listado con el comando Get-Command .
Get-Command -Name *job* | Format-Wide -Column 3
Veamos como ejecutar un proceso Job con Cmdlets.
Start-Job –name PrimerJob –scriptblock {Get-Service WinRM}
Generamos un segundo Job
Start-Job –name SegundoJob –scriptblock {Get-Service WSService}
Para comprobar los Jobs y su estado, ejecutaremos
Get-job
Parametro -AsJob
Algunos cmdlets permiten el parámetro –asjob el cual nos permite ejecutar el mismo como trabajo. Veamos un ejemplo.
Invoke-command –computername vm1 –scriptblock {get-Service WinRm} -asJob
En este caso, es el propio sistema el que nombra el trabajo.
En este caso, la maquina VM1 no existe, con lo cual podemos ver el estado “Failed” en su ejecución.
Resultados
Como podemos ver en los dos primeros trabajos, disponemos en la columna HAsMoreData del valor TRUE. Esta columna indica si han sido devueltos resultados.
Este es el momento de poder ver el resultado de la operación. Para ello utilizaremos el comando “receive-Job”.
Receive-Job –name PrimerJob –keep
Aquí vemos la salida de Get-Service en la salida del primer Job. El modificador –keep evita que los datos sean borrados y que podamos accedamos a ellos nuevamente posteriormente. Recordad, que si cerramos el prompt, los datos se pierden.
Borrar Jobs
Para borrar un Job, basta con obtener el Job deseado con “Get-Job –id X” y redirigir el mismo hacia el cmdlet “Remove-Job”
Leave a Reply