
La configuraci贸n de estado deseado (DSC) de PowerShell facilita la implementaci贸n y configuraci贸n del sistema operativo, las funciones del servidor y las aplicaciones cuando tiene cientos de servidores.
Pero cuando se usa DSC localmente, es decir no en MS Azure, hay un par de matices. Son especialmente tangibles si la organizaci贸n es grande (de 300 estaciones de trabajo y servidores) y a煤n no ha abierto el mundo de los contenedores:
- No hay informes completos sobre el estado de los sistemas. Si la configuraci贸n necesaria no se aplic贸 en algunos servidores, sin estos informes no sabremos al respecto. Es bastante dif铆cil obtener informaci贸n del servidor de informes incorporado, y para una gran cantidad de hosts tambi茅n es mucho tiempo.
- No hay escalabilidad y tolerancia a fallas. Es imposible construir una granja de servidores web DSC de sondeo que tenga una sola base de datos tolerante a fallas y un repositorio com煤n de archivos de configuraci贸n mof, m贸dulos y claves de registro.
Hoy les dir茅 c贸mo resolver el primer problema y obtener los datos para informar. Todo ser铆a m谩s simple si SQL pudiera usarse como una base de datos. MS
promete soporte integrado solo en Windows Server 2019 o en el servidor de compilaci贸n de Windows 1803. Tampoco
podr谩 recuperar datos utilizando el proveedor OleDB, ya que el servidor DSC usa un par谩metro con nombre que no es totalmente compatible con OleDbCommand.
Encontr茅 esta manera: para aquellos que usan Windows Server 2012 y 2016, puede
configurar el uso de la base de datos SQL como el back-end para el servidor DSC de sondeo. Para hacer esto, cree un "proxy" en forma de un archivo .mdb con tablas vinculadas, que redirigir谩 los datos recibidos de los informes del cliente a la base de datos del servidor SQL.
Nota: Para Windows Server 2016, debe usar AccessDatabaseEngine2016x86 , porque Microsoft.Jet.OLEDB.4.0 ya no es compatible.No me detendr茅 en el proceso de implementaci贸n del servidor DSC de sondeo,
aqu铆 se describe muy bien. Solo noto un par de puntos. Si implementamos el DSC de sondeo en el mismo servidor web con WSUS o Kaspersky Security Center, en el script de creaci贸n de configuraci贸n es necesario cambiar los siguientes par谩metros:
UseSecurityBestPractices = $false
De lo contrario, TLS 1.0 estar谩 deshabilitado, no podr谩 conectarse a la base de datos SQL. Kaspersky Security Center tampoco funcionar谩 (el problema debe resolverse en Kaspersky Security Center v11). Enable32BitAppOnWin64 = $true
Si no realiza este cambio, no puede iniciar el servidor DSC AppPool en IIS con WSUS.- Al instalar un servidor DSC con WSUS, deshabilite el almacenamiento en cach茅 est谩tico y din谩mico para el sitio DSC.
Pasemos a configurar el servidor DSC para usar la base de datos SQL.
Crear una base de datos SQL
- Cree una base de datos SQL vac铆a llamada DSC.


- Cree una cuenta para conectarse a esta base de datos. Verifique previamente que la autenticaci贸n de las cuentas de Windows y SQL est茅 habilitada en el servidor SQL.


- Vaya a la secci贸n Asignaci贸n de usuarios. Seleccione una base de datos, en este caso, DSC. Otorgamos los derechos del propietario de la base de datos.

- Listo

Crear un esquema para una base de datos DSC
Hay dos formas de crear un esquema para una base de datos DSC:
- independientemente, a trav茅s de un script en TSQL
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Devices]( [TargetName] [nvarchar](255) NOT NULL, [ConfigurationID] [nvarchar](255) NOT NULL, [ServerCheckSum] [nvarchar](255) NOT NULL, [TargetCheckSum] [nvarchar](255) NOT NULL, [NodeCompliant] [bit] NOT NULL, [LastComplianceTime] [datetime] NULL, [LastHeartbeatTime] [datetime] NULL, [Dirty] [bit] NOT NULL, [StatusCode] [int] NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[RegistrationData]( [AgentId] [nvarchar](255) NOT NULL, [LCMVersion] [nvarchar](255) NULL, [NodeName] [nvarchar](255) NULL, [IPAddress] [nvarchar](255) NULL, [ConfigurationNames] [nvarchar](max) NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO CREATE TABLE [dbo].[StatusReport]( [JobId] [nvarchar](50) NOT NULL, [Id] [nvarchar](50) NOT NULL, [OperationType] [nvarchar](255) NULL, [RefreshMode] [nvarchar](255) NULL, [Status] [nvarchar](255) NULL, [LCMVersion] [nvarchar](50) NULL, [ReportFormatVersion] [nvarchar](255) NULL, [ConfigurationVersion] [nvarchar](255) NULL, [NodeName] [nvarchar](255) NULL, [IPAddress] [nvarchar](255) NULL, [StartTime] [datetime] NULL, [EndTime] [datetime] NULL, [Errors] [nvarchar](max) NULL, [StatusData] [nvarchar](max) NULL, [RebootRequested] [nvarchar](255) NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO
- importe datos de dispositivos vac铆os.mdb como parte del m贸dulo PS PSDesiredStateConfiguration a trav茅s del Asistente de importaci贸n de datos SQL.
Devices.mdb, con el que trabajaremos, se encuentra en C: \ Windows \ SysWOW64 \ WindowsPowerShell \ v1.0 \ Modules \ PSDesiredStateConfiguration \ PullServer.
- Para importar datos, ejecute el Asistente de importaci贸n y exportaci贸n de SQL Server.

- Elegimos de d贸nde recopilaremos los datos; en nuestro caso, es una base de datos de Microsoft Access. Haga clic en Siguiente

- Seleccione el archivo desde donde importamos el esquema.

- Indicamos d贸nde importar: tenemos esta base de datos SQL.

- Seleccionamos el servidor SQL (Nombre del servidor) y la base de datos a la que importaremos los datos (DataBase).

- Seleccionamos la opci贸n Copiar datos de una o m谩s tablas o vistas (copiar datos de tablas o vistas).

- Seleccionamos las tablas desde las cuales importaremos el esquema de la base de datos.

- Marque Ejecutar inmediatamente y haga clic en Finalizar.

- Listo

- Como resultado, las tablas deber铆an aparecer en la base de datos DSC.

Configurar un archivo "proxy" .mdb
Crear una conexi贸n ODBC al servidor SQL. Se supone que MS Access no est谩 instalado en el servidor con DSC, por lo tanto, la configuraci贸n de bases de datos.mdb se realiza en un host intermedio con MS Access instalado.
Creemos una conexi贸n ODBC del sistema al servidor SQL (la profundidad de bits de la conexi贸n debe coincidir con la profundidad de bits de MS Access - 64 o 32). Se puede crear usando:
- Cmdlet Powershell:
Add-OdbcDsn 鈥揘ame DSC 鈥揇riverName 'SQL Server' 鈥揚latform '<64-bit or 32-bit>' 鈥揇snType System 鈥揝etPropertyValue @('Description=DSC Pull Server',"Server=<Name of your SQL Server>",'Trusted_Connection=yes','Database=DSC') 鈥揚assThru
- o manualmente, utilizando el asistente de conexi贸n:
- Herramientas administrativas abiertas. Seleccionamos las fuentes de datos ODBC dependiendo de la versi贸n de MS Access instalada. Vaya a la pesta帽a DSN del sistema y cree una conexi贸n de sistema (Agregar).

- Indicamos que nos conectaremos al servidor SQL. Haz clic en Finalizar.

- Especifique el nombre y el servidor para conectarse. Luego, se deber谩 crear una conexi贸n con los mismos par谩metros en el servidor DSC.

- Indicamos que para conectarnos al servidor SQL usamos el inicio de sesi贸n creado previamente con el nombre DSC.

- Especifique la base de datos en la configuraci贸n de conexi贸n DSC.

- Haz clic en Finalizar.

- Antes de completar la configuraci贸n, verificamos que la conexi贸n funciona (fuente de datos de prueba).

- Listo

Creaci贸n de la base de datos devices.mdb en MS Access. Iniciamos MS Access y creamos una base de datos vac铆a llamada devices.mdb.

- Vaya a la pesta帽a Datos externos, haga clic en la Base de datos ODBC. En la ventana que aparece, seleccione Crear una tabla vinculada para la comunicaci贸n con la fuente de datos.

- En la nueva ventana, seleccione la pesta帽a Origen de datos de la m谩quina y haga clic en Aceptar. En la nueva ventana, ingrese las credenciales para conectarse al servidor SQL.

- Seleccionamos las tablas que deben vincularse. Marcamos la casilla de verificaci贸n Guardar contrase帽a y hacemos clic en Aceptar. La contrase帽a debe guardarse cada vez para las tres tablas.

- En los 铆ndices, debe seleccionar lo siguiente:
- TargetName para la tabla dbo_Devices;

- NodeName o IPAddress para dbo_RegistrationData;

- NodeName o IPAddress para dbo_StatusReport.

- Cambie el nombre de las tablas en MS Access, a saber: elimine el prefijo dbo_ para que DSC pueda usarlas.

- Listo

- Guarde el archivo y cierre MS Access. Ahora copie los dispositivos.mdb resultantes en el servidor DSC (de forma predeterminada en C: \ Archivos de programa \ WindowsPowershell \ DSCService) y reempl谩celo con el existente (si lo hay).
Configurar un servidor DSC para usar SQL
- Regresamos al servidor DSC. Para conectarse al servidor SQL con nuestro archivo proxy, cree una nueva conexi贸n ODBC en el servidor DSC. El nombre, la profundidad de bits y la configuraci贸n de conexi贸n deben ser los mismos que cuando se crea el archivo MDB. Puede copiar los dispositivos vac铆os ya configurados.mdb desde aqu铆.
- Para usar devices.mdb, debe realizar cambios en el web.config del servidor DSC de sondeo (de forma predeterminada, C: \ inetpub \ PSDSCPullServer \ web.config):
- para Windows Server 2012
<add key="dbprovider" value="System.Data.OleDb"> <add key="dbconnectionstr" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program Files\WindowsPowerShell\DscService\Devices.mdb;">
- para Windows Server 2016
<add key="dbprovider" value="System.Data.OleDb"> <add key="dbconnectionstr" value="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Program Files\WindowsPowerShell\DscService\Devices.mdb;">
Esto completa la configuraci贸n del servidor DSC.
Comprobaci贸n del estado del servidor DSC
- Compruebe que se pueda acceder al servidor DSC a trav茅s de un navegador web.

- Ahora verifiquemos si el servidor DSC de sondeo funciona correctamente. Para esto, el m贸dulo xPSDesiredStateConfiguration tiene un script pullserversetuptests.ps1. Antes de ejecutar este script, debe instalar el m贸dulo Powershell llamado Pester. Instalarlo Install-Module -Name Pester.
- Abra C: \ Archivos de programa \ WindowsPowerShell \ Modules \ xPSDesiredStateConfiguration \ <versi贸n del m贸dulo> \ DSCPullServerSetup \ PullServerDeploymentVerificationTest (en el ejemplo, versi贸n 8.0.0.0.0).

- Abra PullServerSetupTests.ps1 y verifique la ruta al web.config del servidor DSC. Rojo resalt贸 la ruta a web.config, que verificar谩 el script. Si es necesario, cambie esta ruta.

- Ejecute pullserversetuptests.ps1
Invoke-Pester. \ PullServerSetupTests.ps1
Todo funciona

- En SQL Management Studio, vemos que los hosts administrados env铆an informes al servidor de informes DSC y los datos van a la base de datos DSC en el servidor SQL.

Eso es todo. En los siguientes art铆culos, planeo decir c贸mo construir informes sobre los datos recibidos y tocar preguntas sobre tolerancia a fallas y escalabilidad.