Automatización con PowerShell en Windows Server 2012

La automatización de la administración es algo esencial en un entorno de data-center o empresarial ya que simplifica el trabajo, de manera que podemos programar distintas tareas en varios servidores. En la versión 2.0 de PowerShell que salió con el Windows Server 2008 R2 nos permitía crear trabajos en segundo plano (background jobs), con la nueva versión 3.0 de PowerShell obtenemos muchas más funciones, una de ellas es la de poder crear Trabajos Programados (Scheduled Jobs).

Trabajos en segundo plano (backgroun Jobs)
Esto nos permite realizar de forma asíncrona y en segundo plano la ejecución de un comando, o dicho de otra manera, podemos ejecutar un comando en un servidor y continuar trabajando sin tener que esperar a que este termine de ejecutarse, lo cual nos ahorra tiempo mirando pal monitor con la boca medio abierta y rezando que no falle jejeje. Vamos a ver un ejemplo instalando la característica de Fax:
Start-Job –ScriptBlock {Install-WindowsFeature –Name Fax –ComputerName Win2012-2}

Sabiendo el nombre que ha asignado al trabajo (Job2) podremos saber el estado del mismo.
Get-Job –Name Job2

Si solo nos interesa ver el estado del trabajo podemos usar el siguiente comando.
Get-Job –Name Job2 | Select-Object State

Si queremos ver la salida generada por el comando por si solicitara un reinicio por ejemplo, podemos usar el comando Receive-Job para mostrarlo.
$Job = Start-Job –ScriptBlock {Uninstall-WindowsFeature –Name fax}
Receive-Job –Job $job

Trabajos Programados (Scheduled Jobs)
Ahora con PowerShell 3.0 podemos programar trabajos y administrarlos desde PowerShell y desde la ventana de Tareas Programadas. Podremos programar trabajos a cierta hora, en base a otra programación o en respuesta de una acción o evento. En este ejemplo vamos a programar la instalación del Visor de XPS.
$trigger = New-JobTrigger –Once –At 13:10
Register-ScheduledJob –Name InstallXPS –ScriptBlock {Install-WindowsFeature -Name XPS-Viewer} –Trigger $trigger

Como comentábamos antes podremos verlo en el Programador de Tareas del equipo.

Sesiones Desconectadas (disconnected sessions)
Este apartado no tiene que ver directamente con todo lo anterior pero nos permite hacer lo anterior de diferente forma, siempre viene bien tener más opciones. Con el comando New-PSSession nos podemos conectar a otro equipo mediante PowerShell. Una de las mejoras que incluye PowerShell 3.0 es la de poder conectarnos a otro equipo y ejecutar cualquier comando, salir de esa conexión sin afectar a la ejecución y poder volver a conectarnos después.

Podemos conectarnos a un equipo sin generar una sesión, pero esta hará que en cuanto salgamos hará una desconexión directa.
Enter-Pssession –ComputerName “Nombre de equipo”
-> Para conectarnos
[Nombre equipo]: PS C:\ -> ya estamos conectados al equipo
[Nombre equipo]: PS C:\ exit-PSSession -> desconectara y cerrará la sesión.

Para conectarnos y hacer uso de las sesiones lo deberemos de hacer de la siguiente manera.
New-PSSession –Computername “nombre equipo” -> Genera la sesión y le asignará un ID y Nombre, pero no nos conecta a ella.
Get-PSSession -> Mostrará las conexiones y su estado

Enter-Pssesion –Name “NombreSesion” o –ID “NumeroID” -> Podemos usar uno de los dos indicadores “Name o ID”, nos conectara al equipo.
[Nombre equipo]: PS C:\ -> ya estamos conectados al equipo
[Nombre equipo]: PS C:\ exit-PSSession -> desconectara y no cerrará la sesión.
Disconnect-PSSession –Name “NombreSesion” o –ID “NumeroID” -> Podemos usar uno de los dos indicadores “Name o ID”, desconectará la sesión pero no la eliminará.

Remove-PSSession –ID 25 -> elimina la sesión.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *