¿Qué es PowerShell DSC?

Hoy quería contarte algunas funcionalidades relacionadas con PowerShell DSC dentro de Microsoft Azure, pero la verdad es que me he dado cuenta de que es posible que todavía no sepas qué es exactamente DSC, por lo que creo que es mejor comenzar por el principio…

PowerShell Desire State Configuration (DSC)

PowerShell Desire State Configuration es una extensión de PowerShell que fue introducida con Windows Server 2012 R2 y Windows 8.1. Su utilidad trata de reflejarse en su nombre y es el estado de configuración deseado de una máquina y/o máquinas ¿Qué significa esto? Básicamente que a través de PowerShell podrás definir cuáles son las características y configuraciones que debe tener uno o varios servidores: roles, registros, servicios ejecutándose, variables, etcétera. Estas configuraciones suelen ser repetibles, pero cuando configuras un servidor a través de asistentes es dificil de compartir con otros miembros del equipo, con tu cliente, etcétera, a no ser que lo documentes y mantengas esa información siempre actualizada, cosa que rara vez ocurre. Ahí es donde entra la infraestructura como código y PowerShell DSC.

Para verlo con un ejemplo voy a crear la configuración para un servidor que debe tener el rol de IIS y ASP.NET 4.5 instalado.

Configuration MyWebServer{
     param(
        [string[]]$computerName="localhost"
    )
    
    Node $computerName{
        
        #Install IIS Role        
        WindowsFeature IIS{
            Ensure = "Present"
            Name = "Web-Server"
        }
        
        #Install ASP.NET 4.5
        WindowsFeature ASP
        {
            Ensure = "Present"
            Name = "Web-Asp-Net45"
        }
    }

}

MyWebServer

Como ves, el script se compone de un bloque llamado Configuration con un nombre descriptivo y un apartado llamado Node, que recibe el nombre de la máquina/s al que va destinada esta configuración. En él se definen dos apartados donde se indica que tanto la característica Web-Server como Web-Asp-Net45 deben estar presentes en el servidor. Ahora bien, ¿de dónde saco estas configuraciones? En este enlace podrás ver todos los recursos que se incluyen dentro de DSC (aunque también es posible crearte los tuyos propios). También puedes revisarlos a través del comando Get-DscResource. En este caso estamos usando WindowsFeature, del cual puedes conocer el nombre de las características disponibles lanzando el comando Get-WindowsFeature en tu servidor.

Get-WindowsFeature command
Get-WindowsFeature command

Tip: También puedes mejorar la búsqueda modificando el comando a Get-WindowsFeature | ogv, lo cual te mostrará un visor aparte con la posibilidad de filtrar.

Get-WindowsFeature | ogv
Get-WindowsFeature | ogv

En mi ejemplo te he mostrado una configuración bastante simple. Si quieres saber cuál es la sintaxis completa para un tipo de recurso puedes verla a través de Get-DscResource -Name WindowsFeature -Syntax.

Get-DscResource syntax
Get-DscResource syntax

Una vez que has definido la configuración deseada es necesario obtener un archivo de tipo MOF (Managed Object Format), que es el que será enviado al nodo de destino con los valores que has elegido para la configuración. Ejecuta el script que acabas de crear y asegurate de que estás ubicado en un directorio fácil de localizar, en mi caso el escritorio.

PowerShell DSC - Get MOF

Como puedes ver se ha creado una carpeta con el mismo nombre que la configuración que has definido. Esto no aplica la configuración en la máquina, ya que falta un último paso que es lanzar este archivo mof a través del comando Start-DscConfiguration.

Start-DscConfiguration –Path .\MyWebServer –Wait –Verbose

Una vez iniciado el proceso comenzará a aplicar todos los requisitos para lograr el estado deseado de la máquina.

DSC Configuration - Start installation
DSC Configuration – Start installation

Cuando finalice podrás comprobar que el servidor IIS ha sido instalado y también ASP.NET 4.5.

Server Manager - IIS installed by PowerShell DSC
Server Manager – IIS installed by PowerShell DSC

Como ves es una forma bastante sencilla de configurar un servidor además de facilitar la automatización, que es el objetivo principal de PowerShell Desire State Configuration.

¡Saludos!