2008 R2: Automatizando tareas administrativas: powershell(3)

Trabajar en remoto con powershell.

Una de las carencias de powershell 1.0 era la falta de un interfaz para ejecutar comandos en una máquina remota, y aunque con WMI y pocos cmdlets podíamos conectar con un equipo remoto, la verdad es que había una ausencia clara de dicha característica. Así nace la característica ‘Remoting’ en Powrshell 2.0.

Como el propio nombre sugiere, es una característica diseñada para la ejecución de comandos (o scripts) en equipos remotos. Esto puede significar la ejecución de uno o varios comandos en una o miles máquinas remotas. Además, los comandos pueden ser emitidos de forma síncrona o asíncrona, uno cada vez o a través de una conexión persistente llamada runspace, e incluso programados o silenciados.

Para uitilizar Remoting hemos de tener los permisos apropiados para conectar con el equipo remoto, ejecutar powershell y ejeutar los comandos deseados. Complementariamente el equipo remoto debe tener Powershell 2.0 y WinRM instalados, además de powershell configurado para remoto.

Cuando usamos Remoting, la sesión que utilicemos para ejecutar comandos determina el entorno propio de ejecución. Los comandos pues están sujetos a las directivas de los equipos remotos, los perfiles y preferencias.

*Los comandos ejecutados contra un equipo remoto no tinen acceso a la información contenida en nuestro perfil local, así qué, los que usen funciones o alias definidos en nuestro perfil local, fallarán estrepitósamente si no están definidos en el equipo remoto.

Cómo

Básicamente Powershell mantiene una conversación que fluye entre un cliente (el equipo con la sesión de powershell) y un servidor (el equipo remoto) contra el que queremos ejecutar los comandos:

> Un comando es ejecutado en el cliente.

> El comando es transmitido al servidor.

> El servidor ejecuta el comando y devuelve su salida al cliente.

> El cliente muestra en pantalla o utiliza la respuesta devuelta.

En un nivel profundo, powershell remoting es muy dependiente de WinRM para facilitar el intercambio de comandos y respuestas entre cliente y servidor. WinRM es un componente de Windows Hardware Management, un servicio basado en web que nos habilita enumerar información y manipularla en un equipo remoto. Para el manejo de sesiones remotas, WinRM fue desarrollado según el protocolo estándar basado en SOAP denominado WS-Management. Este protocolo es muy compatible con los cortafuegos, y se desarrolló primeramente para el intercambio de información de administración entre sistemas que pueden estar basados en diversos sistemas operativos y en varias plataformas de hardware.

Cuando Powershell usa WinRM para enviar/recibir comandos/respuestas entre cliente/servidor el intercambio se realiza mediante series de mensajes XML. El primero de ellos es una solicitud al servidor, conteniendo el comando a ejecutar. Esta solicitud se envía mediante el protocolo SOAP. El servidor como respuesta ejecuta el comando en una nueva instancia de Powershell denominada runspace. Completada la ejecución el resultado va de regreso al cliente en un segundo mensaje XML, también con SOAP.

El motivo del uso de XML es porque no pueden enviarse directamente objetos .NET por la red. Así que para llevar a cabo la transmisión, los objetos se serializan dentro de series de elementos de datos XML(CliXML). En cuanto el cliente/servidor reciben la transmisión, el mensaje XML se convierte en un tipo de objeto desserializado. El objeto resultante no dura demasiado. En vez de eso, es un registro de propiedades en un momento exacto y como tal carece de cualquier método.

Requerimientos

En ambos equipos, el local y el remoto:

> Powershell 2.0 o superior.

> Microsoft .NET Framework 2.0 o superior.

> Windows Remote Management 2.0(Incluído en Windows 7 y 2008R2, hay un paquete de instalación para Vista y 2008)

Configuración

De forma predeterminada WinRM está instalado en todos los Windows Server 2008R2 como parte del propio sistema operativo. Sin embargo, no se encuentran habilitadas las conexiones remotas por cuestiones de seguridad. Podemos utilizar algunos métodos para configurar el Remoting, por ejemplo:

> Usando el cmdlet enable-psremoting (mediante la opción EJECUTAR COMO ADMINISTRADOR):

remotingPS01

inicia el servicio WinRM y configura su inicio en automático; crea una escucha para aceptar solicitudes de cualquier IP; Añade una excepción el el cortafuegos para las comunicaciones vía WS-Management.

Habilita la configuración de las sesiones registradas de PS para recibir instrucciones desde un equipo remoto.

En caso de no estar registrada la configuración de PS, lo hace ahora.

Si los equipos son de 64 bits, también registrará, si no lo está aún, la configuración del PS32.

Quita el valor ‘denegar todos’ del descriptor de seguridad de todas als configuraciones de sesiones registradas.

Reiniciará el servicio WinRM para que tomen efecto todos los nuevos cambios.

> Desde el Administrador del Servidor:

    1. Abrimos la consola
    2. en el área resumen, clic en Configurar Administración remota del Administrador del servidor.
      remotingServerManagement01
    3. Siguiente, Marcar la casilla Habilitar la administración remota de este servidor desde otros equipos.
      remotingServerManagement02
    4. Aceptar

> Usando una GPO:

  1. Creamos una nueva gpo (o editamos una), yo he creado una nueva.
    remotinggpo01remotinggpo02
  2. Expandimos Configuración de equipo, Directivas, Plantillas Administrativas…, Componentes de Windows, Windows Remote Management, seleccionamos Servicio WinRM.
    remotinggpo03
  3. Clicamos en Permitir configuración automática de escucha del panel derecho, habilitamos y definimos los filtros IPv4 e IPv6 con ‘*’.
    remotinggpo04
  4. Aceptar
  5. Después expandimos Configuración de equipo, Directivas, Configuración de Windows, Configuración de Seguridad, Firewall de Windows con seguridad avanzada.
    remotinggpo05
  6. Clic derecho en Reglas de entrada, Nueva regla.
    remotinggpo06
  7. En el asistente: Seleccionamos Predefinida y del desplegable Administración remota de registro de eventos, siguiente.
    remotinggpo07
  8. Siguiente para aceptar las nuevas reglas.
    remotinggpo08
  9. En la página de Acción: marcamos permitir la conexión y pulsamos en Finalizar.
    remotinggpo09
  10. Repetir los pasos de creación para los tipos predefinidos: Administración Remota de Servicios y Administración remota de Firewall de Windows.
    remotinggpo10