15/11/2024

PowerShell DSC : Créer et pousser sa première configuration

I. Présentation

Avec ce chapitre, mon objectif est de vous donner quelques bases pour être capable de rédiger un fichier de configuration PowerShell DSC, et ensuite le pousser (push) sur les nœuds cibles.

Dans cet exemple, nous aurons pour objectif de vérifier que la fonctionnalité SNMP est bien installée sur nos serveurs distants. En effet, imaginons que l’on doit déployer le SNMP sur l’ensemble de nos serveurs pour pouvoir les superviser, ce serait dommage de devoir le faire à la main...

Au passage, j’en profite pour vous indiquer qu’un tutoriel est prévu pour aller plus loin avec SNMP et le configurer également via PowerShell DSC.

II. Quelles sont les ressources DSC disponibles ?

PowerShell DSC utilise ce que l’on appelle des ressources pour fonctionner, une ressource correspond à une tâche, par exemple la ressource « WindowsFeature » sert à gérer les fonctionnalités.

Un module contient un ensemble de ressources. Par défaut, le module « PSDesiredStateConfiguration » est fourni avec PowerShell DSC et il contient un lot de ressources.

Pour lister les ressources disponibles, on utilisera tout simplement « Get-DscResource ». Voici un exemple de sortie où l’on peut remarquer la présence de la ressource « WindowsFeature » :

dsc-conf-1

III. Quelle est la syntaxe d’un fichier de configuration ?

Maintenant que l’on sait qu’il va falloir s’appuyer sur les ressources pour rédiger la configuration DSC, comment ça va s’articuler dans le fichier de configuration ?

Ce que je vous propose, c’est d’ouvrir PowerShell ISE, de retrousser vos manches et de suivre les indications qui vont suivre.

  • La première étape

Votre fichier est vide, on va commencer à rédiger la configuration, tout d’abord indiquez ceci :

Configuration InstallerSNMP {
}

L’ensemble de la configuration doit être comprise dans le bloc « Configuration » qui est suivit d’un nom que vous donnez à cette configuration.

  • La deuxième étape

On va commencer par indiquer les modules qu’il faut importer, selon les ressources que l’on veut utiliser, ce qui donnera :

Configuration InstallerSNMP {
      Import-DscResource –ModuleName PSDesiredStateConfiguration
}

Vous remarquerez l’utilisation du commandlet « Import-DscResource » pour importer le module.

  • La troisième étape

Maintenant, on va devoir préciser le nœud que l’on veut cibler, pour cela on s’appuie sur la directive node suivie du nom du serveur, comme ceci :

Configuration InstallerSNMP {
      Import-DscResource –ModuleName PSDesiredStateConfiguration
      Node MonServeur {
      }
}

Note : En intégrant un tableau (array) en début du fichier de configuration on peut automatiser la compilation d’un fichier MOF pour plusieurs serveurs, pour la même configuration.

A partir de là, vous avez une base de configuration que vous pouvez garder de côté pour la réutiliser ultérieurement, bien que celle-ci évoluera certainement.

  • La quatrième étape

La structure de notre fichier de configuration est prête, désormais dans le bloc « Node » il va falloir déclarer l’ensemble de la configuration à appliquer sur le nœud concerné.

Chaque ressource dispose de ses propriétés, et bien qu’il y ait des propriétés communes à toutes les ressources, certaines sont propres à la ressource. Dans tous les cas, une astuce permet d’obtenir des infos rapidement sur la syntaxe d’une ressource.

On va utiliser le commandlet « Get-DscResource » comme au début de l’article, sauf que cette fois-ci on va aller un peu plus loin dans l’utilisation de la commande… En effet, on va préciser un nom de ressource suivit de l’option « -Syntax » et on va obtenir en retour la syntaxe de la ressource :

Get-DscResource -Name WindowsFeature -Syntax

dsc-conf-2

Ce que l’on pourrait faire, c’est copier-coller ça dans le bloc « Node » de notre fichier de configuration, et ensuite faire le tri entre les directives pour conserver uniquement celles que l’on veut utiliser. Pour faire simple pour cette première configuration, je vais vous donner directement le code à insérer :

       WindowsFeature SNMPService
       {
             Name = "SNMP-Service"
             Ensure = "Present"
       }

Le nom « SNMPService » est un nom personnalisé, vous pouvez appeler la ressource comme vous le souhaitez, l’essentiel étant de précisé devant « WindowsFeature ». Ensuite dans le bloc de la ressource, on indique nos directives, deux en l’occurrence dans cet exemple :

- Name : Le nom de la fonctionnalité/rôle ciblé, il est indispensable car on peut lier les ressources entres-elles (notamment pour créer des dépendances) donc on utilisera le nom à ce moment-là.

- Ensure : Cette directive est très importante et peut prendre deux valeurs : « Present » ou « Absent », si l’on met « Present » on veut alors s’assurer que la fonctionnalité SNMP-Service soit présente, ce qui permettra de l’installer si ce n’est pas fait. Si l’on indique « Absent » ça permet de s’assurer que la fonctionnalité n’est pas installée, donc si elle est installée elle sera désinstallée pour que la configuration du serveur corresponde à la configuration envoyée.

  • La configuration complète

Voici le code complet de la configuration :

Configuration InstallerSNMP {
      Import-DscResource –ModuleName PSDesiredStateConfiguration
      Node MonServeur {
           WindowsFeature SNMPService
           {
                Name = "SNMP-Service"
                Ensure = "Present"
           }
      }
}
# Générer fichier MOF
InstallerSNMP

IV. Compiler le fichier MOF

Pour compiler une configuration et obtenir le fichier MOF correspondant, on va tout simplement appeler la configuration par son nom, en l’occurrence ici « InstallerSNMP ».

On ajoute cet appel directement sous l’accolade de fermeture du bloc « Configuration » au sein du fichier .ps1 de configuration. Exemple avec la génération d’un fichier MOF pour un serveur nommé « ADDS01 » :

dsc-conf-3

Attention, le(s) fichier(s) MOF se génère dans un sous-répertoire où le nom du répertoire sera le nom de la configuration, ce sous-répertoire sera créé dans le répertoire dans lequel vous vous situez au moment de l’exécution du script.

Par curiosité, vous pouvez tout à fait ouvrir le fichier MOF avec un éditeur de texte pour voir sa constitution mais ne le modifiez pas.

V. Pousser la configuration

Maintenant que l’on est en possession du fichier MOF, il va falloir pousser la configuration sur l’hôte distant pour l’appliquer. Pour réaliser cette opération, on va s’appuyer sur le commandlet « Start-DscConfiguration ».

Vous verrez que l’on ne précise pas un chemin vers un fichier MOF, mais le chemin vers un répertoire qui contient un ou plusieurs fichiers MOF (selon le nombre de nœuds concernés) et DSC va prendre chaque fichier MOF qu’il va trouver dans le répertoire pour appliquer la configuration.

Start-DscConfiguration -Path "C:\Users\Administrateur\Documents\TutoDSC\InstallerSNMP" -Wait -Verbose -Force -Credential (Get-Credential)

La commande ci-dessus intègre l’option « Path » pour indiquer le chemin vers le répertoire où se situe le fichier MOF, et ensuite l’ensemble d’options « Wait, Verbose et Force » pour afficher dans la console le déroulement (mode verbeux) de l’exécution et le fait de forcer permet d’appliquer en force la configuration au cas où une « ancienne » exécution serait toujours en cours et bloquée, on reprend le dessus. Enfin, pour s’authentifier sur le serveur distant, si besoin, on précise l’option « Credential » et on met « Get-Credential » pour être prompté et devoir saisir le nom d’utilisateur et le mot de passe, l’objectif est d’éviter de les indiquer en clair dans le code.

On peut voir qu’il n’y a pas d’erreurs lors de l’exécution :

dsc-conf-4

Enfin pour terminer ce chapitre, voici le code complet :

Configuration InstallerSNMP {
Import-DscResource –ModuleName PSDesiredStateConfiguration
Node MonServeur {
        WindowsFeature SNMPService
        {
              Name = "SNMP-Service"
              Ensure = "Present"
        }
    }
}
# Générer fichier MOF
InstallerSNMP
# Exécuter la configuration (push)
Start-DscConfiguration -Path "C:\Users\Administrateur\Documents\TutoDSC\InstallerSNMP" -Wait -Verbose -Force -Credential (Get-Credential) 
author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail