Configuration et fichiers de l'état souhaité PowerShell: Partie 1. Configuration du serveur d'extraction DSC pour qu'il fonctionne avec la base de données SQL



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:

  1. 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).
  2.  Enable32BitAppOnWin64   = $true 

    Si vous n'effectuez pas cette modification, vous ne pouvez pas démarrer le serveur AppPool DSC sur IIS avec WSUS.
  3. 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


  1. Créez une base de données SQL vide nommée DSC.



  2. 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.



  3. 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.

  4. 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.

  1. Pour importer des données, exécutez l'Assistant d'importation et d'exportation SQL Server.

  2. 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.

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

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

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

  6. 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).

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

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

  9. C'est fait.

  10. 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:

  1. 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).

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

  3. 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.

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

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

  6. Cliquez sur Terminer.

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

  8. 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.



  1. 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.

  2. 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.

  3. 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.

  4. 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.

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

  6. C'est fait.

  7. 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


  1. 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.
  2. 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


  1. Vérifiez que le serveur DSC est accessible via un navigateur Web.

  2. 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.
  3. Ouvrez C: \ Program Files \ WindowsPowerShell \ Modules \ xPSDesiredStateConfiguration \ <version du module> \ DSCPullServerSetup \ PullServerDeploymentVerificationTest (dans l'exemple, la version 8.0.0.0.0).

  4. 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.

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

  6. 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Ă©.

Source: https://habr.com/ru/post/fr452064/


All Articles