- DSC es un modelo declarativo e idempotente: describe el estado y el motor converge hasta él.
- PSDSC usa MOF y LCM en Windows; el DSC actual es multiplataforma y usa JSON/YAML.
- Integra con Azure Automation, WinGet y otras herramientas para orquestación a escala.
- Buenas prácticas: modularización, control de versiones, pruebas y alineación con NIST/FISMA.
Si administras sistemas Windows, Linux o macOS, tarde o temprano te toparás con el concepto de estado deseado. PowerShell Desired State Configuration (DSC) es la forma más directa de expresar ese estado y mantenerlo en el tiempo, ahorrando sustos, corrigiendo desviaciones y acelerando despliegues. Aquí vas a encontrar una guía completa, con ejemplos prácticos y las diferencias entre el DSC clásico de PowerShell y el DSC multiplataforma más reciente.
Más allá de definiciones formales, piensa en DSC como una promesa que haces a tus servidores: ‘quiero que estés configurado así, y si cambias, te devolveré a tu sitio’. Lo mejor es que esta promesa es declarativa e idempotente: describes el resultado y el motor se encarga de llegar y mantenerse ahí, sin importar cuántas veces ejecutes la misma configuración.
Qué es DSC y por qué te interesa
DSC es una plataforma de configuración declarativa. Declarativa porque describes el estado que quieres (servicios activos, roles y características, paquetes, archivos, claves de registro…), no la secuencia de pasos minuciosos para alcanzarlo. El motor compara el estado actual con el deseado y hace los cambios mínimos para converger.
Su unidad básica son los recursos. Un recurso DSC encapsula cómo ‘Obtener’, ‘Probar’ y ‘Establecer’ el estado de algo: un servicio, un archivo, Active Directory, SQL Server, etc. Esa interfaz Get/Test/Set permite comprobar si un nodo ya está como toca y, si no, aplicar el cambio.
En PowerShell DSC clásico (PSDSC), el componente que hace de pegamento es el Local Configuration Manager (LCM). El LCM es el motor que aplica configuraciones, las vigila y puede reimponerlas de forma periódica. Trabaja en modos push (tú empujas la configuración) o pull (el nodo la descarga de un Pull Server).
DSC está apoyado en estándares de gestión como CIM y OMI. Esa base abierta facilita la interoperabilidad y que terceras herramientas convivan sin fricciones, algo crucial si tu infraestructura mezcla distintos fabricantes y plataformas.
Diferencias entre PowerShell DSC (PSDSC) y el DSC multiplataforma actual
En los últimos años, Microsoft ha impulsado un DSC que va más allá de PowerShell y de Windows. Este ‘nuevo’ DSC se ejecuta en Windows, Linux y macOS y se invoca con la herramienta de línea de comandos dsc, sin depender de PowerShell ni de su módulo PSDesiredStateConfiguration.
- Independencia de PowerShell: el DSC actual no requiere PowerShell. Aun así, puede usar recursos de PSDSC mediante adaptadores:
Microsoft.DSC/PowerShellpara recursos en clases de PowerShell yMicrosoft.Windows/WindowsPowerShellpara los que dependen de Windows PowerShell. - Formato de documentos: en PSDSC, las configuraciones se compilan a MOF. En el DSC actual, los documentos de configuración y los esquemas de recursos se definen en JSON o YAML.
- Modelo de ejecución: PSDSC cuenta con el LCM, que puede ejecutarse como servicio y mantener el estado. El DSC moderno se invoca como comando; no incluye LCM ni servicio residente.
- Multilenguaje: puedes escribir recursos en bash, Python, C#, Rust o lo que prefieras. El enfoque es de plataforma, no de shell.
- Integración: el DSC multiplataforma expone esquemas JSON para integrarse con WinGet, Microsoft Dev Box y Azure Machine Configuration, entre otras herramientas.
En resumen, PSDSC sigue siendo clave en Windows y muy maduro para administración del sistema operativo y roles. El DSC multiplataforma ofrece un camino más amplio, portable y sin ataduras al lenguaje, ideal para organizaciones híbridas.
Sistemas compatibles y requisitos en Windows
La implementación clásica de DSC en Windows está disponible de forma nativa o mediante Windows Management Framework. Están soportados Windows Server 2016, 2019 y 2022, además de Windows 10 y Windows 11. El paquete recomendado en entornos que no lleven la última versión es WMF 5.1.
Hay una excepción importante: Microsoft Hyper-V Server (producto independiente) no incluye DSC, por lo que no podrás gestionarlo con PSDSC ni con Azure Automation State Configuration.
Para operar de forma remota, Windows debe tener WinRM correctamente configurado. Puedes habilitarlo con privilegios de administrador ejecutando Set-WsManQuickConfig -Force. Esto prepara el equipo para recibir comandos remotos de PowerShell, incluso aunque apliques configuraciones en localhost.
Si necesitas diagnosticar, los eventos de DSC en Windows se registran en Microsoft-Windows-Dsc/Operational. Se pueden activar logs adicionales para depuración avanzada cuando haga falta profundizar.
Primeros pasos con PowerShell DSC en Windows
Lo normal es empezar con los recursos integrados y añadir módulos desde la PowerShell Gallery. El módulo ‘PSDscResources’ ofrece recursos actualizados para cubrir escenarios habituales:
# Instalar recursos DSC desde PowerShell Gallery
Install-Module 'PSDscResources' -Verbose
Una configuración PSDSC se define con la palabra clave Configuration y se compila a MOF. A continuación tienes un ejemplo que crea una variable de entorno y la garantiza como presente:
Configuration CrearVariableEntorno {
param ()
Import-DscResource -ModuleName 'PSDscResources'
Node localhost {
Environment CrearRutaVariableEntorno {
Name = 'CrearVariableEntorno'
Value = 'Hola mundo'
Ensure = 'Present'
Path = $true
Target = @('Process','Machine')
}
}
}
# Compilar el MOF en una carpeta de salida
CrearVariableEntorno -OutputPath './CrearVariableEntorno'
Con los MOF generados, toca aplicarlos. El cmdlet Start-DscConfiguration invoca el LCM para procesar la configuración y puede ejecutarse en modo interactivo para seguir el detalle:
Start-DscConfiguration -Path 'C:\CrearVariableEntorno' -Wait -Verbose
Para inspeccionar cómo ha quedado el nodo, puedes consultar el estado actual que ve DSC. Get-DscConfiguration devuelve los valores reales aplicados y Get-DscLocalConfigurationManager muestra la metaconfiguración vigente:
# Estado efectivo del nodo
Get-DscConfiguration
# Metaconfiguración (LCM)
Get-DscLocalConfigurationManager
Si necesitas ‘desanclar’ una configuración, también hay salida. Remove-DscConfigurationDocument -Stage Current -Verbose elimina el documento aplicado y te deja el nodo listo para recibir otro MOF.
En escenarios gestionados, a veces te interesará aplicar una metaconfiguración LCM (por ejemplo, para cambiar el modo de refresco o apuntar a un Pull Server). Eso se hace generando un MOF de metaconfiguración y aplicándolo con Set-DscLocalConfigurationManager -Path 'c:\metaconfig\localhost.meta.mof' -Verbose.
Local Configuration Manager: modos, frecuencia y configuraciones parciales
El LCM define cómo y cuándo se imponen las configuraciones. Parámetros como ConfigurationMode (ApplyOnly, ApplyAndMonitor o ApplyAndAutoCorrect) y las frecuencias RefreshFrequencyMins y ConfigurationModeFrequencyMins controlan si el nodo solo aplica una vez, vigila, o vigila y corrige automáticamente.
Además, puedes trabajar en push o pull. En pull, los nodos consultan a un servidor de configuración (Pull Server) para descargar MOF y módulos según su identificador. Este enfoque es muy útil a escala, porque centraliza versiones y cumplimiento.
Desde Windows Server 2016 (DSC v2), el LCM admite configuraciones parciales. Consiste en trocear la configuración en fragmentos independientes que el LCM combina: por ejemplo, un equipo de seguridad define su parte y otro equipo la de aplicaciones, sin pisarse.
Escenarios de uso reales
DSC es ideal para ‘estándares operativos’ repetibles y auditables. Algunas aplicaciones típicas incluyen configurar roles y características, asegurar servicios, preparar IIS, instalar paquetes, tocar el Registro o definir variables de entorno. Puedes encontrar guías prácticas sobre cómo tocar el registro con PowerShell para integrarlo en tus configuraciones.
Para aplicaciones, puedes automatizar la instalación, la configuración de dependencias, la publicación de sitios y los ajustes finos. La gracia es que el despliegue resultante es consistente en todos los nodos, sea un laboratorio o un entorno de producción.
En seguridad y cumplimiento, DSC encaja de maravilla. Políticas de endurecimiento, parámetros de firewall, cuentas locales o directivas de auditoría se vuelven una configuración versionada y auditable, no un ‘recetario’ manual.
La gestión de red (adaptadores, IPs, reglas, servicios) también entra en el saco. Si se altera algo, el motor lo detecta y, en función del modo, vuelve a imponer el estado, lo cual reduce derivadas inesperadas y horas de soporte.
Como idea sencilla, imagina que quieres que un servicio crítico esté siempre ‘running’. Con un recurso Service y modo ApplyAndAutoCorrect, si alguien lo detiene, el LCM lo levanta de nuevo. Puedes apoyarte incluso en tareas programadas para reforzar la comprobación.
Integración con Azure y orquestación
DSC brilla cuando forma parte de una cadena de automatización. Azure Automation puede orquestar el aprovisionamiento (runbooks, workflows) y delegar la configuración de las VMs a DSC, tanto en Azure como on-prem.
Un patrón habitual es publicar tu configuración a una cuenta de almacenamiento y asociarla a las VMs con la extensión de DSC. Comandos como Publish-AzureVMDscConfiguration empacan tu script en un .zip con los módulos necesarios, y Set-AzureVMDSCExtension lo aplica en creación.
# Publicar la configuración (convierte el .ps1 y módulos en .zip)
Publish-AzureVMDscConfiguration -ConfigurationPath './MiConfig.ps1' -Force
# Asignar la configuración a una VM al desplegarla
Set-AzureVMDSCExtension -VM $vm -ConfigurationArchive 'MiConfig.zip' -ConfigurationName 'NombreDeConfig'
En despliegues IaaS, la idea es sencilla: la orquestación crea y conecta recursos de nube (red, almacenamiento, VMs) y DSC configura el sistema operativo y las aplicaciones dentro de cada VM. Si además versionas y pruebas las configuraciones, tendrás entornos reproducibles.
Instalación y uso del DSC multiplataforma
El DSC moderno se distribuye como binarios portables. Puedes descargar la edición más reciente desde el repositorio de GitHub de PowerShell/DSC, descomprimir y añadir la carpeta al PATH. Sin instalaciones complicadas ni dependencias extra.
En Windows, también puedes instalarlo desde Microsoft Store a través de WinGet. Primero localiza el paquete y después instala estable o preview:
# Buscar los paquetes publicados
winget search DesiredStateConfiguration --source msstore
# Instalar la versión estable
winget install --id 9NVTPZWRC6KQ --source msstore
# Instalar la versión preliminar
winget install --id 9PCX3HX4HZ0Z --source msstore
Este DSC funciona con documentos de configuración escritos en JSON o YAML y con esquemas también en JSON. La CLI dsc permite invocar recursos individuales, aplicar documentos completos y escribir recursos en cualquier lenguaje. Además, los adaptadores antes citados permiten aprovechar recursos PSDSC existentes.
Al estandarizar la estructura de documentos y salidas mediante esquemas JSON, la integración con otras herramientas de plataforma (WinGet, Dev Box, Azure Machine Configuration) es más directa, lo que facilita pipelines y flujos de trabajo modernos.
Buenas prácticas y cumplimiento normativo
Para no caer en el caos, conviene modularizar. Divide tus configuraciones en componentes reutilizables y crea módulos de recursos para piezas complejas. Eso te permite mantener y escalar con menos fricción.
Versiona todo en control de código fuente (Git). Guardar configuraciones y recursos en repositorios facilita el trabajo en equipo, el historial y los revertidos. Si además usas ramas y pull requests, tendrás revisiones y calidad.
Prueba antes de desplegar en producción. Herramientas como Pester ayudan a validar recursos y configuraciones y evitar efectos colaterales, y un entorno de preproducción debe ser parte del proceso.
Muchas organizaciones siguen marcos como NIST SP 800-53 (por ejemplo, control CM-2 sobre configuraciones base) o FISMA. DSC aporta consistencia y auditabilidad para alinear tus sistemas con políticas y estándares, reduciendo el esfuerzo manual de cumplimiento.
Registros y diagnóstico
Cuando algo no cuadra, el registro de eventos es tu aliado. En Windows, el canal Microsoft-Windows-Dsc/Operational centraliza lo ocurrido (aplicación de recursos, correcciones, errores, etc.). Si necesitas más detalle, habilita logs adicionales orientados a depuración.
En Azure, revisa también los logs de la extensión de DSC y los diagnósticos de la VM. Correlacionar la salida de Start-DscConfiguration -Verbose con el visor de eventos te ahorra tiempo para localizar el recurso exacto que ha fallado.
DSC, ya sea el clásico de PowerShell o el multiplataforma, te da una base sólida para IaC en servidores y estaciones de trabajo. Define el estado, compártelo como código, pruébalo y deja que el motor haga el trabajo repetitivo; así tus equipos se centran en valor real y no en apagar fuegos.
Redactor apasionado del mundo de los bytes y la tecnología en general. Me encanta compartir mis conocimientos a través de la escritura, y eso es lo que haré en este blog, mostrarte todo lo más interesante sobre gadgets, software, hardware, tendencias tecnológicas, y más. Mi objetivo es ayudarte a navegar por el mundo digital de forma sencilla y entretenida.
