26/05/2024

PowerShell DSC : Pousser des modules PowerShell sur ses nœuds

I. Distribution de modules

L’exécution de configuration via PowerShell DSC exige qu’un module utilisé au sein d’une configuration doit être présent sur l’hôte distant qui l’utilise (node/nœud). Pour automatiser cela et éviter de copier à la main sur chaque serveur ses modules, on peut créer une configuration qui va copier les modules sur les serveurs à notre place. Autant le faire avec PowerShell DSC, c’est plus fun.

Note : Le module natif « PSDesiredStateConfiguration » est inclus dans le « Windows Management Framework 5.0 » (WMF 5.0), que vous devez de toute façon installer sur votre serveur pour utiliser DSC.

C’est surtout pour les modules que l’on va télécharger sur des repositories comme PSGallery ou GitHub qu’il faudra les envoyer sur vos nœuds. Nous allons voir comment procéder, ça nous donne l’occasion d’écrire une configuration pour s’amuser un peu.

II. Comment distribuer les modules par DSC ?

Dans cet exemple, j’utilise un partage sur un serveur source où je vais stocker mes modules dans ce partage et ils seront copiés vers les nœuds distants. On copiera tous les modules situés dans ce partage, autrement dit on copiera le contenu du dossier partagé vers le répertoire « Modules » de chaque nœud.

Note : Une autre approche consisterait à définir dans la variable d’environnement « $PSModulePath » le chemin réseau vers le partage où vous stockez vos modules. Cette variable contient les chemins vers les répertoires où PowerShell va chercher les modules, ce qui permettrait aux nœuds de lire en direct les modules grâce au partage mis en place et inclus dans $PSModulePath.

On s’appuie sur une ressource DSC intégrée à Windows, plus précisément au WMF 5.0 nativement pour réaliser cette opération. La ressource DSC que l’on utilise se nomme « file » et elle permet d’initier la copie de fichiers ou de dossiers, tout en incluant une notion de récursivité ce qui est important dans notre cas.

Le fichier de configuration DSC :

# Configuration DSC pour copier des modules DSC sur des serveurs distants
Configuration PushDSCModules{
    # Définir plusieurs noeuds (serveurs cibles)
    param(
       [string[]]$Nodes =@("ADDS01","WDS01")
    )
    # Importer les ressources DSC
    Import-DscResource –ModuleName PSDesiredStateConfiguration
    # Noeud localhost
    Node $Nodes {
        # Pousser les modules PowerShell vers les noeuds
        File Push-Module
        {
            SourcePath = "\\FloHypervisor\DSC_Modules$"
            DestinationPath = "C:\Program Files\WindowsPowerShell\Modules\"
            Recurse = $true
            Type = "Directory"
        }
    }
}
# Générer fichier MOF – Se positionner avant dans le répertoire souhaité
PushDSCModules

La dernière ligne ci-dessus est essentielle, je vous le rappelle que son rôle est de créer un fichier compilé pour chaque nœud, ces fichiers compilés seront utilisés ensuite par la commande « Start-DscConfiguration ».

On peut exécuter la configuration DSC en mode push grâce à la commande suivante où il suffit de remplacer le Path par le chemin où se situe vos fichiers MOF pour cette configuration :

Start-DscConfiguration -Path "C:\DSC\PushDSCModules" -Wait -Verbose -Force -Credential (Get-Credential)

Par sécurité, on ne précise pas les credentials dans la commande, c’est pourquoi on initie un « Get-Credential » pour être invité à les saisir.

Voici la sortie provoquée par l’exécution concernant le nœud « WDS01 » :

COMMENTAIRES : L’opération « Invoquer une méthode CIM » est terminée.
COMMENTAIRES : Un appel de méthode du Gestionnaire de configuration local est arrivé de l'ordinateur FLOHYPERVISOR avec le SID utilisateur S-1-5-21-1580586848-2890924796-1949041167-500.
COMMENTAIRES : [WDS01] : Gestionnaire de configuration local : [ Début  Définir  ]
COMMENTAIRES : [WDS01]: LCM:  [ Début  Ressource]  [[File]Push-Module]
COMMENTAIRES : [WDS01]: LCM:  [ Début  Test     ]  [[File]Push-Module]
COMMENTAIRES : [WDS01]:                            [[File]Push-Module] Création de la liste de fichiers à partir du cache.
COMMENTAIRES : [WDS01]: LCM:  [ Fin    Test     ]  [[File]Push-Module]  en 0.6090 secondes.
COMMENTAIRES : [WDS01]: LCM:  [ Début  Définir  ]  [[File]Push-Module]
COMMENTAIRES : [WDS01]:                            [[File]Push-Module] Création de la liste de fichiers à partir du cache.
COMMENTAIRES : [WDS01]:                            [[File]Push-Module] Copie du fichier \\FloHypervisor\DSC_Modules$\cSNMP\.gitattributes sur C:\Program Files\WindowsPowerShell\Modules\cSNMP\.gitattributes en cours.
COMMENTAIRES : [WDS01]:                            [[File]Push-Module] Copie du fichier \\FloHypervisor\DSC_Modules$\cSNMP\appveyor.yml sur C:\Program Files\WindowsPowerShell\Modules\cSNMP\appveyor.yml en cours.
COMMENTAIRES : [WDS01]:                            [[File]Push-Module] Copie du fichier \\FloHypervisor\DSC_Modules$\cSNMP\cSNMP.psd1 sur C:\Program Files\WindowsPowerShell\Modules\cSNMP\cSNMP.psd1 en cours.
COMMENTAIRES : [WDS01]:                            [[File]Push-Module] Copie du fichier \\FloHypervisor\DSC_Modules$\cSNMP\DSCResources\cSNMPCommunity\cSNMPCommunity.psm1 sur C:\Program Files\WindowsPowerShell\Modules\cSNMP\DSCResources\cSNMPCommunity\cSNMPCommunity.psm1 en cours.
COMMENTAIRES : [WDS01]:                            [[File]Push-Module] Copie du fichier \\FloHypervisor\DSC_Modules$\cSNMP\DSCResources\cSNMPCommunity\cSNMPCommunity.schema.mof sur C:\Program Files\WindowsPowerShell\Modules\cSNMP\DSCResources\cSNMPCommunity\cSNMPCommunity.schema.mof en cours.
COMMENTAIRES : [WDS01]:                            [[File]Push-Module] Copie du fichier \\FloHypervisor\DSC_Modules$\cSNMP\DSCResources\cSNMPCommunity\cSNMPCommunity.Tests.ps1 sur C:\Program Files\WindowsPowerShell\Modules\cSNMP\DSCResources\cSNMPCommunity\cSNMPCommunity.Tests.ps1 en cours.
COMMENTAIRES : [WDS01]:                            [[File]Push-Module] Copie du fichier \\FloHypervisor\DSC_Modules$\cSNMP\DSCResources\cSNMPEnableAuthenticationTrap\cSNMPEnableAuthenticationTrap.psm1 sur C:\Program Files\WindowsPowerShell\Modules\cSNMP\DSCResources\cSNMPEnableAuthenticationTrap\cSNMPEnableAuthenticationTrap.psm1 en cours.
COMMENTAIRES : [WDS01]:                            [[File]Push-Module] Copie du fichier \\FloHypervisor\DSC_Modules$\cSNMP\DSCResources\cSNMPEnableAuthenticationTrap\cSNMPEnableAuthenticationTrap.schema.mof sur C:\Program Files\WindowsPowerShell\Modules\cSNMP\DSCResources\cSNMPEnableAuthenticationTrap\cSNMPEnableAuthenticationTrap.schema.mof en cours.
COMMENTAIRES : [WDS01]:                            [[File]Push-Module] Copie du fichier \\FloHypervisor\DSC_Modules$\cSNMP\DSCResources\cSNMPManager\cSNMPManager.psm1 sur C:\Program Files\WindowsPowerShell\Modules\cSNMP\DSCResources\cSNMPManager\cSNMPManager.psm1 en cours.
COMMENTAIRES : [WDS01]:                            [[File]Push-Module] Copie du fichier \\FloHypervisor\DSC_Modules$\cSNMP\DSCResources\cSNMPManager\cSNMPManager.schema.mof sur C:\Program Files\WindowsPowerShell\Modules\cSNMP\DSCResources\cSNMPManager\cSNMPManager.schema.mof en cours.
COMMENTAIRES : [WDS01]:                            [[File]Push-Module] Copie du fichier \\FloHypervisor\DSC_Modules$\cSNMP\DSCResources\cSNMPTrapCommunity\cSNMPTrapCommunity.psm1 sur C:\Program Files\WindowsPowerShell\Modules\cSNMP\DSCResources\cSNMPTrapCommunity\cSNMPTrapCommunity.psm1 en cours.
COMMENTAIRES : [WDS01]:                            [[File]Push-Module] Copie du fichier \\FloHypervisor\DSC_Modules$\cSNMP\DSCResources\cSNMPTrapCommunity\cSNMPTrapCommunity.schema.mof sur C:\Program Files\WindowsPowerShell\Modules\cSNMP\DSCResources\cSNMPTrapCommunity\cSNMPTrapCommunity.schema.mof en cours.
COMMENTAIRES : [WDS01]:                            [[File]Push-Module] Copie du fichier \\FloHypervisor\DSC_Modules$\cSNMP\DSCResources\cSNMPTrapDestination\cSNMPTrapDestination.psm1 sur C:\Program Files\WindowsPowerShell\Modules\cSNMP\DSCResources\cSNMPTrapDestination\cSNMPTrapDestination.psm1 en cours.
COMMENTAIRES : [WDS01]:                            [[File]Push-Module] Copie du fichier \\FloHypervisor\DSC_Modules$\cSNMP\DSCResources\cSNMPTrapDestination\cSNMPTrapDestination.schema.mof sur C:\Program Files\WindowsPowerShell\Modules\cSNMP\DSCResources\cSNMPTrapDestination\cSNMPTrapDestination.schema.mof en cours.
COMMENTAIRES : [WDS01]:                            [[File]Push-Module] Copie du fichier \\FloHypervisor\DSC_Modules$\cSNMP\README.md sur C:\Program Files\WindowsPowerShell\Modules\cSNMP\README.md en cours.
COMMENTAIRES : [WDS01]:                            [[File]Push-Module] Copie du fichier \\FloHypervisor\DSC_Modules$\cSNMP\SNMP.png sur C:\Program Files\WindowsPowerShell\Modules\cSNMP\SNMP.png en cours.
COMMENTAIRES : [WDS01]:                            [[File]Push-Module] Copie du fichier \\FloHypervisor\DSC_Modules$\cSNMP\Tests\appveyor.pester.ps1 sur C:\Program Files\WindowsPowerShell\Modules\cSNMP\Tests\appveyor.pester.ps1 en cours.
COMMENTAIRES : [WDS01]:                            [[File]Push-Module] Copie du fichier \\FloHypervisor\DSC_Modules$\cSNMP\Tests\Appveyor.ps1 sur C:\Program Files\WindowsPowerShell\Modules\cSNMP\Tests\Appveyor.ps1 en cours.
COMMENTAIRES : [WDS01]:                            [[File]Push-Module] Copie du fichier \\FloHypervisor\DSC_Modules$\cSNMP\Tests\DSC.tests.ps1 sur C:\Program Files\WindowsPowerShell\Modules\cSNMP\Tests\DSC.tests.ps1 en cours.
COMMENTAIRES : [WDS01]:                            [[File]Push-Module] Copie du fichier \\FloHypervisor\DSC_Modules$\cSNMP\Tests\SNMP.ps1 sur C:\Program Files\WindowsPowerShell\Modules\cSNMP\Tests\SNMP.ps1 en cours.
COMMENTAIRES : [WDS01]: LCM:  [ Fin    Définir  ]  [[File]Push-Module]  en 1.0790 secondes.
COMMENTAIRES : [WDS01]: LCM:  [ Fin    Ressource]  [[File]Push-Module]
COMMENTAIRES : [WDS01] : Gestionnaire de configuration local : [ Fin    Définir  ]
COMMENTAIRES : [WDS01] : Gestionnaire de configuration local : [ Fin    Définir  ]  en 9.4000 secondes.
COMMENTAIRES : L’opération « Invoquer une méthode CIM » est terminée.
COMMENTAIRES : Le temps nécessaire à l'exécution de la tâche de configuration est de 15.511 secondes

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