
La Configuration d'Ătat dĂ©sirĂ© PowerShell (DSC) simplifie considĂ©rablement le dĂ©ploiement et la configuration du systĂšme d'exploitation, des rĂŽles de serveur et des applications, surtout lorsque vous avez des centaines de serveurs.
Mais en utilisant DSC sur site, c'est-à -dire pas dans MS Azure, quelques subtilités apparaissent. Elles sont particuliÚrement perceptibles si l'organisation est grande (à partir de 300 stations de travail et serveurs) et si 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 pas été appliquée à certains serveurs, nous n'en saurons rien sans ces rapports. Obtenir des informations à partir du serveur de rapports intégré est assez difficile, et pour un grand nombre d'hÎtes, cela prend encore plus de temps.
- Il manque l'évolutivité et la tolérance aux pannes. Il n'est pas possible de construire un parc de serveurs web DSC interrogeant qui posséderaient une unique base de données tolérante aux pannes et un stockage commun des fichiers mof de configurations, modules et clés de registre.
Aujourd'hui, je vais vous parler de comment résoudre le premier problÚme et obtenir des données pour établir des rapports. Ce serait plus simple si l'on pouvait utiliser SQL comme base de données. MS n'offre un support intégré que sur Windows Server 2019 ou dans la build Windows Server 1803. Il n'est pas non plus possible de récupérer des données en utilisant OleDB provider , car le serveur DSC utilise un paramÚtre nommé qui n'est pas entiÚrement pris en charge par OleDbCommand.
J'ai trouvé une méthode : ceux qui utilisent Windows Server 2012 et 2016 peuvent utiliser une base de données SQL comme backend pour le serveur DSC interrogeant. Pour cela, nous allons créer un « proxy » sous la forme d'un fichier .mdb avec des tables liées, qui redirigera les données obtenues des rapports clients vers la base de données du serveur SQL.
Remarque : pour Windows Server 2016, il est nécessaire d'utiliser , car Microsoft.Jet.OLEDB.4.0 n'est plus pris en charge.
Je ne vais pas m'attarder sur le processus de dĂ©ploiement du serveur DSC interrogeant, qui est trĂšs bien dĂ©crit . Je soulignerai seulement quelques points. Si nous dĂ©ployons le serveur DSC interrogeant sur un mĂȘme serveur web que WSUS ou Kaspersky Security Center, il est nĂ©cessaire de changer les paramĂštres suivants dans le script de crĂ©ation de configuration :
UseSecurityBestPractices     = $falseSinon, TLS 1.0 sera dĂ©sactivĂ©, vous ne pourrez pas vous connecter Ă la base de donnĂ©es SQL. Kaspersky Security Center ne fonctionnera Ă©galement pas (le problĂšme doit ĂȘtre rĂ©solu dans Kaspersky Security Center v11).
Enable32BitAppOnWin64   = $trueSi ce changement n'est pas effectué, il ne sera pas possible de lancer l'AppPool du serveur DSC sur IIS avec WSUS.
- Lors de l'installation du serveur DSC avec WSUS, désactivez le cache statique et dynamique pour le site DSC.
Passons à la configuration du serveur DSC pour utiliser la base de données SQL.
Création de la base de données SQL
- Nous allons créer une base de données SQL vide nommée DSC.


- Créons un compte pour nous connecter à cette base de données. Vérifiez au préalable que l'authentification des comptes soit autorisée sur le serveur SQL, aussi bien pour Windows que pour SQL.


- Accédez à la section User Mapping. Sélectionnez la base de données, ici - DSC. Accordez les droits de propriétaire de la base de données.

- C'est fait.

Création du schéma pour la base de données DSC
Le schĂ©ma de la base de donnĂ©es DSC peut ĂȘtre créé de deux maniĂšres :
- soit manuellement, via un script 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 du fichier vide devices.mdb via le module PS PSDesiredStateConfiguration à l'aide de l'Assistant d'importation de données SQL.
Le fichier Devices.mdb avec lequel nous allons travailler se trouve dans C:WindowsSysWOW64WindowsPowerShellv1.0ModulesPSDesiredStateConfigurationPullServer.
- Pour importer les données, lancez l'Assistant d'importation et d'exportation SQL Server.

- SĂ©lectionnez la source des donnĂ©es â dans notre cas, il s'agit de la base de donnĂ©es Microsoft Access. Cliquez sur Suivant.

- Sélectionnez le fichier à partir duquel nous allons importer le schéma.

- Indiquez oĂč importer â ici, c'est la base de donnĂ©es SQL.

- Choisissez le serveur SQL (Server Name) et la base de données dans laquelle nous allons importer les données (DataBase).

- Sélectionnez l'option Copier les données d'une ou plusieurs tables ou vues (copier les données à partir de tables ou de vues).

- SĂ©lectionnez les tables d'oĂč nous allons importer le schĂ©ma de la base de donnĂ©es.

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

- C'est fait.

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

Configuration du fichier .mdb «proxy»
Création d'une connexion ODBC au serveur SQL. On suppose que MS Access n'est pas installé sur le serveur avec DSC, donc la configuration databases.mdb est réalisée sur un hÎte intermédiaire avec MS Access installé.
CrĂ©ons une connexion ODBC systĂšme au serveur SQL (l'architecture de la connexion doit correspondre Ă l'architecture de MS Access â 64 ou 32 bits). Elle peut ĂȘtre créée Ă l'aide de :
â la commande Powershell :
Add-OdbcDsn âName DSC âDriverName 'SQL Server' âPlatform '' âDsnType System âSetPropertyValue @('Description=Serveur de rĂ©cupĂ©ration DSC', "Server=", 'Trusted_Connection=yes', 'Database=DSC') âPassThruâ ou manuellement, via l'assistant de connexion :
- Ouvrons Outils d'administration. Sélectionnons les sources de données ODBC selon la version installée de MS Access. Passons à l'onglet DSN systÚme et créons une connexion systÚme (Ajouter).

- Indiquons que nous allons nous connecter au serveur SQL. Cliquons sur Terminer.

- Indiquons le nom et le serveur pour la connexion. Ensuite, une connexion avec les mĂȘmes paramĂštres devra ĂȘtre créée sur le serveur DSC.

- Indiquons que pour se connecter au serveur SQL, nous utilisons le login que nous avons préalablement créé avec le nom DSC.

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

- Cliquons sur Terminer.

- Avant de terminer la configuration, vérifions que la connexion fonctionne (Tester la source de données).

- C'est fait.

Création de la base de données devices.mdb dans MS Access. Lançons MS Access et créons une base de données vide nommée devices.mdb.

- Passons Ă l'onglet DonnĂ©es externes, cliquons sur Base de donnĂ©es ODBC. Dans la fenĂȘtre qui apparaĂźt, choisissons CrĂ©er une table liĂ©e pour se connecter Ă la source de donnĂ©es.

- Dans la nouvelle fenĂȘtre, choisissons l'onglet Machine Data Source et cliquons sur OK. Dans la nouvelle fenĂȘtre, saisissons les informations d'identification pour se connecter au serveur SQL.

- SĂ©lectionnons les tables Ă lier. Cochons la case Enregistrer le mot de passe et cliquons sur OK. Le mot de passe doit ĂȘtre enregistrĂ© chaque fois pour les trois tables.

- Dans les index, il faut choisir les suivants :
â TargetName pour la table dbo_Devices;
â NodeName ou IPAddress pour dbo_RegistrationData;
â NodeName ou IPAddress pour dbo_StatusReport.
- Renommons les tables dans MS Access, à savoir : supprimons le préfixe dbo_ afin que DSC puisse les utiliser.

- C'est fait.

- Enregistrons le fichier et fermons MS Access. Maintenant, copions le devices.mdb obtenu sur le serveur DSC (par défaut dans C:Program FilesWindowsPowershellDSCService) et le remplaçons par l'existant (s'il y en a un).
Configuration du serveur DSC pour utiliser SQL
- Retour au serveur DSC. Pour se connecter Ă SQL Server avec notre fichier proxy, nous allons crĂ©er une nouvelle connexion ODBC sur le serveur DSC. Le nom, l'architecture et les paramĂštres de connexion doivent ĂȘtre les mĂȘmes que lors de la crĂ©ation du fichier MDB. Vous pouvez copier le fichier devices.mdb vide dĂ©jĂ configurĂ© d'ici.
- Pour utiliser devices.mdb, il est nécessaire de modifier le fichier web.config du serveur DSC en mode interrogateur (par défaut - C:inetpubPSDSCPullServerweb.config) :
â pour Windows Server 2012
â pour Windows Server 2016
Avec cela, la configuration du serveur DSC est terminée.
Vérification du bon fonctionnement du serveur DSC
- Vérifions que le serveur DSC est accessible via un navigateur web.

- VĂ©rifions maintenant si le serveur interrogateur DSC fonctionne correctement. Pour cela, le module xPSDesiredStateConfiguration contient le script pullserversetuptests.ps1. Avant d'exĂ©cuter ce script, il est nĂ©cessaire d'installer le module PowerShell nommĂ© Pester. Nous lâinstallons avec Install-Module -Name Pester.
- Ouvrons C:Program FilesWindowsPowerShellModulesxPSDesiredStateConfigurationDSCPullServerSetupPullServerDeploymentVerificationTest (dans l'exemple, la version est 8.0.0.0.0).

- Ouvrons PullServerSetupTests.ps1 et vérifions le chemin vers le fichier web.config du serveur DSC. Le chemin vers le fichier web.config que le script va vérifier est surligné en rouge. Si nécessaire, modifions ce chemin.

- Exécutons pullserversetuptests.ps1
Invoke-Pester .PullServerSetupTests.ps1
Tout fonctionne.
- Dans SQL Management Studio, nous voyons que les hÎtes gérés envoient des rapports au serveur de rapports DSC et que les données vont dans la base de données DSC sur le serveur SQL.

C'est tout. Dans les prochains articles, je prévois de parler de la création de rapports à partir des données obtenues et d'aborder les questions de haute disponibilité et d'évolutivité.
Source : habr.com





































