Conoce Windows PowerShell DSC
Conoce las ventajas de utilizar Windows PowerShell DSC, como las configuraciones declarativas
![](https://blogs.masterhacks.net/wp-content/uploads/2019/05/masterhacks_windows_powershell_DSC.png)
Conoce las ventajas de utilizar Windows PowerShell DSC, como las configuraciones declarativas
Windows PowerShell DSC (Desired State Configuration, o Configuración de Estado Deseado), es un nuevo componente del Marco de Administración de Windows que PowerShell 4.0 introdujo por primera vez. Windows PowerSherll DSC permite administrar y mantener los sistemas de forma escalable y estandarizada al tirar de configuraciones declarativas.
Beneficios de Windows PowerShell DSC
- Extender el Windows Management Framework v4 – Disponible iniciando con Windows PowerShell 4.0 en Windows Server 2012 R2 y Windows 8.1.
- Habilitar administración y mantenimiento de sistemas utilizando configuraciones declarativas.
- Utilizar recursos para crear configuraciones para aplicaciones específicos o componentes en un sistema – Puede ser descargado de una comunidad de sitios o puedes escribir una propia.
- Poder reaplicar configuraciones automáticamente cuando un sistema se desplaza del estado deseado.
- Está basado en estándares y es heterogéneo – Puedes administrar y operar el sistema con un OMI-complicant CIM Server.
Windows PowerShell DSC es una extensión de Windows PowerShell y del Windows Management Framework. PowerShell 4.0 introdujo por primera vez Windows PowerShell DSC en Windows Server 2012 R2 y Windows 8.1. Se puede utilizar Windows PowerShell DSC para administrar y mantener los sistemas por medio del uso de configuraciones declarativas.
Este enfoque es único porque en lugar de crear un script de Windows PowerShell para ejecutar una sentencia de comandos (enfoque imperativo), implementa una configuración que especifica a Windows PowerShell lo que quiere hacer (enfoque declarativo). Con DSC no es necesario preocuparse por incluir el manejo de errores u otra lógica, ya que el marco de automatización subyacente lo maneja automáticamente.
Enfoque Imperativo (Windows PowerShell)
- Script define cómo se debe realizar una tarea
- Scripts pueden ser difíciles de leer
- Scripts no se ejecutarán nuevamente y se deben ejecutar a través de una acción administrativa para volver a aplicar la configuración, si es necesario
- Scripts requieren una lógica personalizada para detectar y corregir la desviación de la configuración
Enfoque declarativo (Windows PowerShell DSC)
- Las configuraciones definen los que se debe hacer
- Las configuraciones son fáciles de entender
- Las configuraciones se vuelven a aplicar, según sea necesario, en el intervalo que se elija
- Las configuraciones utilizan la lógica integrada en los recursos DSC para detectar y corregir la desviación de la configuración
DSC se basa en los recursos, que son los bloques de construcción imperativos que se utilizan para crear configuraciones. DSC, de forma predeterminada, incluye recursos que se pueden utilizar para administrar componentes básicos del sistema operativo Windows, como servicios, archivos, configuraciones de registro. Sin embargo, el poder real de DSC reside en el hecho de que cualquiera puede crear recursos. Además, hay comunidades en crecimiento donde puedes compartir y descargar recursos de DSC para configurar una variedad de aplicaciones y componentes dentro de su organización.
Debido a que las configuraciones puede cambiar involuntariamente con el tiempo, DSC puede volver a aplicar de forma automática cualquier configuración implementada siempre que detecte que el sistema se ha desviado del estado deseado. DSC también es muy escalable, y puede ser utilizado en una variedad de entornos, grandes o pequeños, centralizados o descentralizados.
DSC no requiere que los sistemas pertenezcan a un dominio de AD DS. Además, DSC se basa en estándares y se basa en el modelo de Infraestructura de Gestión Abierta (OMI). Por lo tanto, también puede ser utilizado para administrar cualquier sistema operativo con un servidor de Modelo de Información Común (CIM), compatible con OMI, como CentOS y otras plataformas de Linux.
Requerimientos para Windows PowerShell DSC
1.- Habilitar Windows Remote Management:
- Set-WsManQuickConfig
- AD DS Group Policy for domain-joined systems
2.- Configurar el Administrador de Configuración Local en sistemas objetivos (si es necesario)
3.- Instalar el módulo deseado:
- Install-Module -Name xComputerManagement
4.- Crear y compilar una configuración en Windows PowerShell ISE
5.- Desplegar la configuración (utilizando método push):
- Start-DscConfiguration
Autorizar y desplegar las configuraciones DSC para una organización requiere un proceso multipasos, que incluye:
1.- Habilitar Windows Remote Management. Debido a que DSC depende de la administración remota de Windows (WinRM), debe asegurarse de que los escuchas de WinRM estén configurados en los sistemas que se deseen administrar mediante DSC. De forma predeterminada, WinRM está habilitado en Windows Server 2012 R2 y sistemas más recientes, pero no en clientes con Windows 8.1 o Windows 10.
Se puede habilitar WinRM en sistemas individuales con el cmdlet Set-WSManQuickConfig, o se puede aprovechar la política de grupo para habilitar la escucha en los sistemas unidos al dominio.
2.- Configurar el administrador de configuración local. El agente del Administrador de Configuración Local (LCM) procesa las configuraciones DSC en los sistemas que se están administrando. Antes de comenzar a implementar configuraciones de DSC, se debe configurar el agente de LCM según las necesidades.
Se puede configurar LCM utilizando un archivo especial de Formato de Objeto Administrado (MOF) que establece los parámetros específicos del LCM, y luego poder aplicar la configuración usando el cmdlet Set-DscLocalConfiguration. Para la mayoría de las configuraciones, la configuración predeterminada del modo de inserción LCM es suficiente. La siguiente lista describe algunos de los parámetros específicos de LCM:
a) Modo de actualización: El agente LCM recibe configuraciones a través de este modo. De forma predeterminada, RefreshMode se establece en Push, lo que significa que aplica las configuraciones ejecutando el cmdlet Start-DscConfiguration en el sistema local o uno remoto. Un RefreshMode of Pull significa que el agente de LCM verifica regularmente un servidor HTTP remoto o un recurso de bloque de mensajes del servidor (SMB) para las configuraciones.
También es posible configurar RemoteMode como Desactivado, lo que evita que el agente LCM aplique cualquier configuración. El uso de DSC no requiere configurar un servidor de extracción. Sin embargo, los servidores de extracción pueden ser beneficiosos en entornos grandes y distribuidos.
b) RefreshFrecuencyMins: Este es el intervalo de tiempo, en minutos, en el que el LCM sondea el servidor HTTP remoto o el recurso compartido de SMB para las configuraciones. Cuando se configura en modo Push, este valor se ignora. El valor predeterminado es 30.
c) Modo de configuración: Este modo indica la acción que realiza el agente LCM al aplicar configuraciones. De forma predeterminada, el agente LCM está configurado para ApplyAndMonitor, lo que significa que el agente LCM aplica la configuración inicial, pero solo registra las desviaciones futuras. Un ConfigurationMode de AppyAndAutoCorrect significa que el agente LCM aplica la configuración inicial y corrige de forma automática cualquier desviación futura.
d) ConfigurationModeFreqencyMins: Este es el intervalo de tiempo, en minutos, en el que el LCM verifica y vuelve a aplicar las configuraciones. Por defecto, este valor es 15.
3.- Instalar los módulos deseados. Los módulos desarrollados para DSC están disponibles en la Galería de Windows PowerShell. Para instalar módulos desde la Galería de Windows PowerShell, es necesario el módulo PowerShellGet, que incluye la versió 5.0 de PS. Opcionalmente, se puede instalar el módulo PowerShellGet para Windows PowerShell 4.0 descargando un instalador MSI.
El módulo PowerShellGet incluye los cmdlets Find-Module y Install-Module necesarios para la instalación de un módulo desde la Galería de Windows PowerShell. Para instalar la última versión del módulo xComputerManagement, se puede ejecutar el siguiente comando de Windows PowerShell:
Install-Module -Name xComputerManagement
![](http://blogs.masterhacks.net/wp-content/uploads/2019/05/masterhacks_powershell_nuget.png)
Es posible que aparezca un error al no contar con el proveedor NuGet, en ese caso, presionamos Sí (s) para instalarlo y lo confirmamos después.
La ejecución de este comando creará una nueva carpeta llamada xComputerManagement en c:\Archivos de Programa\WindowsPowerShell\Modules. Si es necesario, se puede copiar la carpeta xExchange manualmente a cualquier sistema destino que no tenga PowerShellGet. Esto puede ser necesario en sistemas en los que no se puede instalar PowerShellGet o no cuentan con acceso a Internet.
4.- Crear y compilar una configuración DSC básica. Una vez que se haya compilado con todos los requisitos previos y se instalaron los módulos deseados en los servidores de destino que se requieren configurar, se puede comenzar a crear las secuencias de comandos de configuración por medio de recursos DSC. Los scripts de configuración no modifican los sistemas de destino. Solo son una plantilla que se usa para compilar un archivo MOF que el agente LCM inserta o extrae del sistema de destino. Se puede crear scripts de configuración en cualquier script de Windows PowerShell o editor de texto. La configuración se llama, al igual que una función, para compilar los datos de configuración en archivos MOF para cada nodo definido.
5.- Implementar las configuraciones a los servidores deseados. Una vez que se compiló la configuración en un archivo .mof, se puede enviar la configuración al LCM en el nodo de destino mediante el uso del cmdlet Start-DscConfiguration. La ejecución de este comando invoca al agente LCM para procesar la configuración y, de ser necesario, realiza cambios en el nodo destino. Para implementar una confguración llamada Hostname-SRV1.mof, se ejecuta el siguiente comando:
Start-DscConfiguration –Wait –Verbose –Path C:\DSC –ComputerName Hostname-SRV1
Se puede ejecutar el comando con los parámetros -Wait y -Verbose para poder ver los pasos detallados que el agente de LCM en el nodo de destino está procesando. El uso de estos parámetros es esencial cuando se requiere solucionar problemas en la implementación de la configuración.
En cualquier momento, luego de haber implementado una configuración, se puede ejecutar el cmdlet Test-DscConfiguration para verificar si el nodo de destino está en el estado deseado. Test-DscConfiguration devolverá un estado True si el sistema está en el estado deseado, de lo contrario devolverá False.
Implementando Windows PowerShell DSC
Para crear una configuración DSC en un archivo .ps1, se requieren tres elementos:
- Configuración. Identificar el archivo como archivo de configuración
- Nodo. Identificar la computadora o máquina virtual para aplicar la configuración
- Recurso. Identificar el bloque de propiedades a configurar
Un ejemplo de un archivo .ps1 para configuración DSC es:
Configuration EjemploDscConfiguration {
Node "Hostname-SVR1" {
WindowsFeature MyFeatureInstance {
Ensure = "Present"
Name = "RSAT"
}
WindowsFeature My2ndFeatureInstance {
Ensure = "Present"
Name = "Bitlocker"
}
}
}
Sintaxis de configuración
El script mostrado es un ejemplo de configuración simple. Un script de configuración consta de al menos tres partes:
- El bloque de configuración. Este es el bloque de script más externo. Se define utilizando la palabra clave de configuración y proporcionando un nombre. En el ejemplo anterior, el nombre de la configuración es EjemploDscConfiguration.
- Uno o más bloques de nodo. Estos definen los nodos (computadoras o máquinas virtuales) que está configurando. En la configuración de ejemplo anterior, existe un bloque de nodo que se dirige a una computadora llamada Hostname-SRV1.
- Uno o más bloques de recursos. Aquí es donde la configuración establece las propiedades de los recursos que está configurando. En el ejemplo anterior, existen dos bloques de recursos, cada uno de ellos llama al recurso WindowsFeature.
Antes de poder utilizar una configuración, es necesario compilarla desde un archivo MOF. Para hacerlo, llame a la configuración de la misma manera que llamaría a una función de Windows PowerShell.
Nota: Para llamar a una configuración, la función debe estar en el ámbito global. Esto se puede hacer al utilizar «.\» al llamar al archivo de configuración, o ejecutando el archivo de configuración presionando F5 o haciendo clic en el botón Ejecutar secuencia de comandos en el entorno de secuencias de comandos integrado (ISE) de Windows PowerShell.
Al llamar a la configuración, se crea:
- Una carpeta en el directorio que se está utilizando con el mismo nombre de la configuración.
- Un archivo llamada NodeName.mof en el directorio de Nombre de Configuración, donde NodeName es el nombre del nodo objetivo de la configuración. Si se tiene más de un nodo, un archivo MOF se creará para cada nodo.