
La configuration de l'état souhaité de PowerShell (DSC) facilite le déploiement et la configuration du systÚme d'exploitation, des rÎles de serveur et des applications lorsque vous avez des centaines de serveurs.
Mais lorsque vous utilisez DSC sur site, c'est-Ă -dire pas dans MS Azure, il y a quelques nuances. Ils sont particuliĂšrement tangibles si l'organisation est grande (Ă partir de 300 postes de travail et serveurs) et qu'elle n'a pas encore ouvert le monde des conteneurs:
- Il n'y a pas de rapports complets sur l'état des systÚmes. Si la configuration souhaitée n'a été appliquée sur aucun serveur, alors sans ces rapports, nous ne le saurons pas. Il est assez difficile d'obtenir des informations à partir du serveur de rapports intégré, et pour un grand nombre d'hÎtes, c'est aussi long.
- Il n'y a aucune évolutivité et tolérance aux pannes. Il est impossible de créer une batterie de serveurs Web DSC d'interrogation qui aurait une seule base de données tolérante aux pannes et un référentiel commun de fichiers de configuration mof, de modules et de clés d'enregistrement.
Aujourd'hui, je vais vous dire comment rĂ©soudre le premier problĂšme et obtenir les donnĂ©es pour le reporting. Tout serait plus simple si SQL pouvait ĂȘtre utilisĂ© comme base de donnĂ©es. MS
promet une prise en charge intégrée uniquement dans Windows Server 2019 ou dans le serveur Windows build 1803. Il
échouera également
à récupérer des données à l'aide du fournisseur OleDB, car le serveur DSC utilise un paramÚtre nommé qui n'est pas entiÚrement pris en charge par OleDbCommand.
J'ai trouvé ceci: pour ceux qui utilisent Windows Server 2012 et 2016, vous pouvez
configurer l' utilisation de la base de données SQL comme backend pour le serveur DSC d'interrogation. Pour ce faire, créez un «proxy» sous la forme d'un fichier .mdb avec des tables liées, qui redirigera les données reçues des rapports clients vers la base de données du serveur SQL.
Remarque: Pour Windows Server 2016, vous devez utiliser AccessDatabaseEngine2016x86 , car Microsoft.Jet.OLEDB.4.0 n'est plus pris en charge.Je ne m'attarderai pas sur le processus de déploiement du serveur DSC d'interrogation, il est trÚs bien décrit
ici . Je note seulement quelques points. Si nous dĂ©ployons l'interrogation DSC sur le mĂȘme serveur Web avec WSUS ou Kaspersky Security Center, alors dans le script de crĂ©ation de configuration, il est nĂ©cessaire de modifier les paramĂštres suivants:
UseSecurityBestPractices = $false
Sinon, TLS 1.0 sera dĂ©sactivĂ©, vous ne pourrez pas vous connecter Ă la base de donnĂ©es SQL. Kaspersky Security Center ne fonctionnera pas non plus (le problĂšme doit ĂȘtre rĂ©solu dans Kaspersky Security Center v11). Enable32BitAppOnWin64 = $true
Si vous n'effectuez pas cette modification, vous ne pouvez pas démarrer le serveur AppPool DSC sur IIS avec WSUS.- Lors de l'installation d'un serveur DSC avec WSUS, désactivez la mise en cache statique et dynamique pour le site DSC.
Passons à la configuration du serveur DSC pour utiliser la base de données SQL.
Création d'une base de données SQL
- Créez une base de données SQL vide nommée DSC.


- Créez un compte pour vous connecter à cette base de données. Vérifiez au préalable que l'authentification des comptes Windows et SQL est activée sur le serveur SQL.


- Accédez à la section User Mapping. Sélectionnez une base de données, dans ce cas, DSC. Nous accordons les droits du propriétaire de la base de données.

- C'est fait.

Création d'un schéma pour une base de données DSC
Il existe deux façons de créer un schéma pour une base de données DSC:
- indépendamment, via 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
- importer des données à partir de devices.mdb vides dans le cadre du module PS PSDesiredStateConfiguration via l'assistant d'importation de données SQL.
Devices.mdb, avec lequel nous travaillerons, se trouve dans C: \ Windows \ SysWOW64 \ WindowsPowerShell \ v1.0 \ Modules \ PSDesiredStateConfiguration \ PullServer.
- Pour importer des données, exécutez l'Assistant d'importation et d'exportation SQL Server.

- Nous choisissons d'oĂč nous collecterons les donnĂ©es - dans notre cas, il s'agit d'une base de donnĂ©es Microsoft Access. Cliquez sur Suivant.

- SĂ©lectionnez le fichier d'oĂč nous importons le schĂ©ma.

- Nous indiquons oĂč importer - nous avons cette base de donnĂ©es SQL.

- Sélectionnez le serveur SQL (nom du serveur) et la base de données dans laquelle nous importerons les données (DataBase).

- Nous sélectionnons l'option Copier les données d'une ou plusieurs tables ou vues (copie de données de tables ou de vues).

- Nous sélectionnons les tables à partir desquelles nous importerons le schéma de base de données.

- Cochez Exécuter immédiatement et cliquez sur Terminer.

- C'est fait.

- Par conséquent, les tables doivent apparaßtre dans la base de données DSC.

Configuration d'un fichier «proxy» .mdb
Création d'une connexion ODBC au serveur SQL. Il est supposé que MS Access n'est pas installé sur le serveur avec DSC, donc la configuration de databases.mdb est effectuée sur un hÎte intermédiaire avec MS Access installé.
CrĂ©ons une connexion ODBC systĂšme au serveur SQL (la profondeur de bits de la connexion doit correspondre Ă la profondeur de bits de MS Access - 64 ou 32). Il peut ĂȘtre créé en utilisant:
- applet de commande PowerShell:
Add-OdbcDsn âName DSC âDriverName 'SQL Server' âPlatform '<64-bit or 32-bit>' âDsnType System âSetPropertyValue @('Description=DSC Pull Server',"Server=<Name of your SQL Server>",'Trusted_Connection=yes','Database=DSC') âPassThru
- ou manuellement, Ă l'aide de l'assistant de connexion:
- Ouvrez les outils d'administration. Nous sélectionnons les sources de données ODBC en fonction de la version de MS Access installée. Accédez à l'onglet SystÚme DSN et créez une connexion systÚme (Ajouter).

- Nous indiquons que nous allons nous connecter au serveur SQL. Cliquez sur Terminer.

- SpĂ©cifiez le nom et le serveur Ă connecter. Ensuite, une connexion avec les mĂȘmes paramĂštres devra ĂȘtre créée sur le serveur DSC.

- Nous indiquons que pour nous connecter au serveur SQL, nous utilisons la connexion précédemment créée avec le nom DSC.

- Spécifiez la base de données dans les paramÚtres de connexion DSC.

- Cliquez sur Terminer.

- Avant de terminer les réglages, nous vérifions que la connexion fonctionne (Test Data Source).

- C'est fait.

Création de la base de données devices.mdb dans MS Access. Nous démarrons MS Access et créons une base de données vide appelée devices.mdb.

- AccĂ©dez Ă l'onglet DonnĂ©es externes, cliquez sur la base de donnĂ©es ODBC. Dans la fenĂȘtre qui apparaĂźt, sĂ©lectionnez CrĂ©er une table liĂ©e pour la communication avec la source de donnĂ©es.

- Dans la nouvelle fenĂȘtre, sĂ©lectionnez l'onglet Machine Data Source et cliquez sur OK. Dans la nouvelle fenĂȘtre, entrez les informations d'identification pour la connexion au serveur SQL.

- Nous sĂ©lectionnons les tables qui doivent ĂȘtre liĂ©es. Cochez la case Enregistrer le mot de passe et cliquez sur OK. Le mot de passe doit ĂȘtre enregistrĂ© Ă chaque fois pour les trois tables.

- Dans les indices, vous devez sélectionner les éléments suivants:
- TargetName pour la table dbo_Devices;

- NodeName ou IPAddress pour dbo_RegistrationData;

- NodeName ou IPAddress pour dbo_StatusReport.

- Renommez les tables dans MS Access, à savoir: supprimez le préfixe dbo_ pour que DSC puisse les utiliser.

- C'est fait.

- Enregistrez le fichier et fermez MS Access. Copiez maintenant le fichier devices.mdb résultant sur le serveur DSC (par défaut dans C: \ Program Files \ WindowsPowershell \ DSCService) et remplacez-le par celui existant (le cas échéant).
Configuration d'un serveur DSC pour utiliser SQL
- Nous revenons au serveur DSC. Pour vous connecter au serveur SQL avec notre fichier proxy, crĂ©ez une nouvelle connexion ODBC sur le serveur DSC. Le nom, la profondeur de bits et les paramĂštres de connexion doivent ĂȘtre les mĂȘmes que lors de la crĂ©ation du fichier MDB. Vous pouvez copier les devices.mdb vides dĂ©jĂ configurĂ©s Ă partir d'ici.
- Pour utiliser devices.mdb, vous devez apporter des modifications au web.config du serveur DSC d'interrogation (par défaut, C: \ inetpub \ PSDSCPullServer \ web.config):
- pour 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;">
- pour 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;">
Ceci termine la configuration du serveur DSC.
Vérification de l'intégrité du serveur DSC
- Vérifiez que le serveur DSC est accessible via un navigateur Web.

- Vérifions maintenant si le serveur DSC d'interrogation fonctionne correctement. Pour cela, le module xPSDesiredStateConfiguration dispose d'un script pullserversetuptests.ps1. Avant d'exécuter ce script, vous devez installer le module Powershell nommé Pester. Installez-le Install-Module -Name Pester.
- Ouvrez C: \ Program Files \ WindowsPowerShell \ Modules \ xPSDesiredStateConfiguration \ <version du module> \ DSCPullServerSetup \ PullServerDeploymentVerificationTest (dans l'exemple, la version 8.0.0.0.0).

- Ouvrez PullServerSetupTests.ps1 et vérifiez le chemin d'accÚs au web.config du serveur DSC. Rouge a mis en évidence le chemin d'accÚs à web.config, qui vérifiera le script. Si nécessaire, modifiez ce chemin.

- Exécutez pullserversetuptests.ps1
Invoke-Pester. \ PullServerSetupTests.ps1
Tout fonctionne.

- Dans SQL Management Studio, nous voyons que les hÎtes administrés envoient des rapports au serveur de rapports DSC et les données vont à la base de données DSC sur le serveur SQL.

Câest tout. Dans les articles suivants, je prĂ©vois de dire comment crĂ©er des rapports sur les donnĂ©es reçues, et je vais aborder les questions sur la tolĂ©rance aux pannes et l'Ă©volutivitĂ©.