Aller au contenu

Préparer une machine Windows avec WinGet DSC - Tutoriel IT-Connect


Messages recommandés

Posté(e)
  • IT-Connect
  • Publié le 29 janvier 2026
  • Par Florian BURNEL
  • it-connect.fr
  • Environ 7 minutes de lecture

tuto winget dsc windows

En s'appuyant sur PowerShell DSC 3.0, le gestionnaire de paquets WinGet est capable de déployer des applications sur Windows. Il peut également définir la configuration de la machine à l'aide d'un simple fichier YAML. Voici un exemple pratique d'utilisation de WinGet DSC.

Comme son nom l'indique, WinGet DSC repose sur deux composants de Windows :

  • WinGet, le gestionnaire de paquets permettant de gérer les applications directement en ligne de commande. Par exemple, la commande winget install <nom du paquet> permet d'installer une application.
  • PowerShell DSC 3.0, l'outil de gestion de configuration de Microsoft, intégré à Windows et qui permet de définir un état attendu pour une machine Windows (dans le même esprit qu'Ansible). DSC signifie Desired State Configuration.

L'idée est la suivante : définir la configuration attendue dans un fichier YAML et l'appliquer directement par l'intermédiaire de WinGet. La commande à utiliser sera alors winget configure <fichier YAML>. Mais comment créer ce fichier ? Que peut-on définir comme directive ? C'est ce que nous verrons dans la suite de ce tutoriel.

Les fonctionnalités de WinGet DSC

Le fichier de configuration exécuté par l'intermédiaire de WinGet DSC est capable d'agir sur plusieurs composantes du système d'exploitation Windows. On peut notamment citer :

  • Paquets : installer des logiciels par l'intermédiaire des dépôts WinGet / Microsoft Store.
  • Registre : configurer une clé ou une valeur de Registre.
  • Environnement : gérer une variable d’environnement.
  • Système : configurer des fonctionnalités de Windows, y compris pour pousser des configurations de logiciels.
  • Script : exécuter des blocs de script PowerShell.
  • Service : gérer un service Windows.
  • Fonctionnalités Windows : activer, désactiver et configurer certaines fonctionnalités Windows.

La structure du fichier WinGet DSC

Un fichier de configuration WinGet doit utiliser une convention de nommage très simple : il suffit de préciser l'extension .yaml (ou .yml). Dans la suite de cet article, nous créerons le fichier suivant : winget-dsc-windows11.yaml. Dans sa documentation, Microsoft évoque aussi l'extension .winget.

Ce fichier doit commencer par une ligne précisant le schéma de configuration utilisé. Soit cette ligne :

# yaml-language-server: $schema=https://aka.ms/configuration-dsc-schema/0.2

Ensuite, un fichier de configuration WinGet est séparé en deux sections principales :

  • Assertions : les conditions préalables requises pour exécuter la configuration. Par exemple, une version de Windows minimale.
  • Ressources : les actions à effectuer en s'appuyant sur des ressources DSC. C'est dans cette section qu'il faudra déclarer la liste des logiciels à installer, les options à configurer sur Windows ou encore les scripts à exécuter.

Dans la suite de cet article, nous verrons un exemple concret.

Exemple d'utilisation de WinGet DSC sur Windows 11

Activer les fonctionnalités avancées de WinGet

Commencez par ouvrir une console sur votre machine Windows. La première étape à effectuer qu'une seule fois consiste à activer les fonctionnalités étendues de WinGet grâce à la commande suivante :

winget configure --enable

Enabling extended features. Requires store access.
  ██████████████████████████████  100%

Cette étape préparatoire débloque les fonctionnalités de la commande winget configure que nous utiliserons par la suite pour appliquer la configuration.

Construire le fichier de configuration WinGet

Désormais, nous allons construire le fichier winget-dsc-windows11.yaml de façon à exécuter les actions suivantes :

  • Installer l'application VLC Media Player via WinGet
  • Installer l'application 7-Zip via WinGet
  • Installer l'application Mozilla Firefox ESR via WinGet
  • Installer l'application PowerToys via Microsoft Store
  • Configurer la valeur de Registre EnablePeriodicBackup pour activer la sauvegarde automatique du Registre
  • Personnaliser la configuration de l'Explorateur de fichiers Windows (afficher les extensions de fichiers, masquer les fichiers cachés)
  • Personnaliser la configuration de la Barre des tâches de Windows (alignement à gauche, masquer le bouton des widgets, etc.)
  • Créer le dossier C:\sources à l'aide de PowerShell (surtout pour montrer un exemple d'exécution de code PowerShell)

Dans le cas où vous souhaitez installer des applications, comme c'est mon cas ici, vous devez identifier le nom des paquets. Pour cela, utilisez WinGet en ligne de commande. Prenons l'exemple du paquet PowerToys.

La recherche s'effectue de cette façon :

winget search <nom du logiciel>
winget search powertoys

Vous devez ensuite repérer la valeur de la colonne ID correspondante à l'application à installer. Ici, ce serait la première ligne avec l'ID est XP89DCGQ3K6VLD et la source est msstore. Nous allons réutiliser ces informations dans le fichier de configuration.

YYKdozzvkVsYosQTtzaVx7.jpg

Voici la configuration complète pour dérouler les actions évoquées ci-dessus, en commençant par une vérification de la version minimale de Windows. La configuration est facilement lisible. Sachez que dans la section resources, l'identifiant de chaque bloc (id) est une valeur personnalisable.

# yaml-language-server: $schema=https://aka.ms/configuration-dsc-schema/0.2
properties:
  assertions:
    - resource: Microsoft.Windows.Developer/OsVersion
      directives:
        description: Verify min OS version requirement (Windows 11 24H2)
        allowPrerelease: true
      settings:
        MinVersion: '10.0.26100'
  resources:
    - resource: Microsoft.WinGet.DSC/WinGetPackage
      id: Package.VLC
      directives:
        description: Installation de Media Player
        securityContext: elevated
      settings:
        id: VideoLAN.VLC
        source: winget

    - resource: Microsoft.WinGet.DSC/WinGetPackage
      id: Package.7Zip
      directives:
        description: Installation de 7-Zip
        securityContext: elevated
      settings:
        id: 7zip.7zip
        source: winget

    - resource: Microsoft.WinGet.DSC/WinGetPackage
      id: Package.Firefox
      directives:
        description: Installation de Mozilla Firefox ESR
        securityContext: current
      settings:
        id: Mozilla.Firefox.ESR.fr
        source: winget

    - resource: Microsoft.WinGet.DSC/WinGetPackage
      id: Package.PowerToys
      directives:
        description: Installation de PowerToys
        securityContext: current
      settings:
        id: XP89DCGQ3K6VLD
        source: msstore

    - resource: PSDscResources/Registry
      id: Registry.RegBackup
      directives:
        description: Activation de la sauvegarde automatique du Registre
        securityContext: elevated
      settings:
        Key: 'HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Configuration Manager'
        ValueName: 'EnablePeriodicBackup'
        ValueData: 1
        ValueType: Dword
        Ensure: Present
        Force: true

    - resource: Microsoft.Windows.Developer/WindowsExplorer
      directives:
        description: Modify Windows Explorer settings
        allowPrerelease: true
      settings:
        FileExtensions: Show
        HiddenFiles: Hide
        RestartExplorer: True

    - resource: Microsoft.Windows.Developer/Taskbar
      directives:
        description: Modify taskbar settings
        allowPrerelease: true
      settings:
        Alignment: Left
        SearchBoxMode: ShowIconAndLabel
        TaskViewButton: Show
        WidgetsButton: Hide

    - resource: PSDscResources/Script
      id: PowerShell.SourcesFolder
      directives:
        description: Création du dossier C:\sources
        securityContext: elevated
        allowPrerelease: true
      settings:
        # GetScript : Retourne l'état actuel (Obligatoire, sinon la ressource retourne une erreur)
        GetScript: |
          $exist = Test-Path 'C:\sources'
          return @{ Result = if ($exist) { "Present" } else { "Absent" } }

        # TestScript : Vérifie si le dossier existe déjà.
        # Renvoie $true si le dossier est là (ne rien faire).
        # Renvoie $false si le dossier manque (lancer le SetScript).
        TestScript: |
          return (Test-Path 'C:\sources')

        # SetScript : La commande de création (exécutée uniquement si TestScript = $false)
        SetScript: |
          New-Item -Path 'C:\sources' -ItemType Directory -Force

	configurationVersion: 0.2.0
Il y a des directives communes, notamment :
  • description : utile pour documenter votre configuration et faciliter l'interprétation.
  • securityContext: elevated : pour lancer l'action avec des privilèges administrateur, ce qui est essentiel pour certaines installations de logiciels ou configuration.
  • allowPrerelease: true : autoriser ou non la configuration à utiliser des modules en préversion. Nécessaire actuellement pour certains modules.

À la fin, la ligne configurationVersion: 0.2.0 indique la version à utiliser pour lire la configuration.

Valider la configuration WinGet

La commande winget configure contient plusieurs sous-commandes (voir cette page), dont celle nommée validate permettant de valider la syntaxe d'un fichier de configuration. Cette étape me semble essentielle avant d'appliquer une configuration sur une machine.

Voici un exemple d'utilisation sur le fichier actuel :

winget configure validate <nom du fichier de configuration>
winget configure validate winget-dsc-windows11.yaml

La validation n’a détecté aucun problème.

Il y a des erreurs importantes signalées par cette commande. Alors que, parfois, c'est plus des avertissements, notamment pour vous forcer à respecter les bonnes pratiques. Par exemple, si vous indiquez Registry comme nom de ressource à la place de PSDscResources/Registry, il y aura un avertissement. La raison : le nom est trop vague, et plusieurs modules peuvent contenir une ressource avec ce nom, ce qui peut porter à confusion.

Appliquer la configuration WinGet

Quand vous serez prêts, appliquez la configuration sur la machine Windows 11 avec la commande suivante :

winget configure --file winget-dsc-windows11.yaml --accept-configuration-agreements

Patientez pendant l'opération. Un suivi s'affiche dans la console au fur et à mesure. Quand il y a un bouclier sur une ligne, c'est parce que l'action est effectuée avec des privilèges élevés. La configuration est effectuée en temps réel, donc vous verrez directement les changements.

Xj2qqCR8tSvXtMhQmYbdWR.png

Conclusion

WinGet DSC est une approche moderne pour le déploiement des applications sur Windows et pour appliquer une configuration. C'est une approche aussi plus standardisée et structurée qu'un script PowerShell maison, car on se rapproche plus du style d'un outil comme Ansible grâce à l'utilisation de PowerShell DSC.

Pour préparer une machine rapidement, y compris un environnement de développement, WinGet DSC est efficace. Vous écrivez la configuration une fois et vous l'appliquez autant de fois que vous le souhaitez. Surtout, si vous relancez la même configuration sur la même machine plusieurs fois, tout sera vérifié et seules les étapes nécessaires (par exemple un logiciel manquant) seront appliquées.

Des informations supplémentaires sont disponibles dans la documentation :

author avatar

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.

Afficher l’article complet

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.