Files
DeployCenter/README.md
T
benoit e067721763 Ajout du support de unattend
Ajout du script cmd à utiliser pour lancer DeployCenter
2026-10-17 20:41:41 +02:00

28 KiB
Raw Blame History

DeployCenter — première version de la réécriture

Contenu

  • DeployCenter.ps1 : point d'entrée et logique applicative existante.
  • Modules/ThemeManager.psm1 : découverte, chargement et validation des thèmes PSD1, avec prise en charge des rôles de boutons.
  • Modules/UI.psm1 : contrôles et fenêtres d’interface, construits selon le thème actif.
  • Modules/Deployment.psm1 : partitionnement UEFI/GPT et installation de l’édition Windows sélectionnée.
  • Modules/Unattend.psm1 : découverte et validation des profils de réponse Windows, puis génération sécurisée du XML.
  • Themes/Light.psd1 et Themes/Dark.psd1 : palettes et styles des boutons.

Lancement

Depuis le dossier DeployCenter, lancer :

powershell.exe -ExecutionPolicy Bypass -File .\DeployCenter.ps1

Pour lancer en fenêtre redimensionnable :

powershell.exe -ExecutionPolicy Bypass -File .\DeployCenter.ps1 -Windowed

Conserver à côté du script les ressources habituelles du projet (Assets, uvnc, HardwareInfo.ps1, etc.). Les dossiers Modules et Themes doivent rester à côté de DeployCenter.ps1.

Mise en page

Le redimensionnement de la fenêtre recalcule désormais les largeurs des panneaux, la taille du tableau et du journal, ainsi que la position des boutons. Les marges et hauteurs des contrôles restent volontairement fixes pour préserver la lisibilité sous WinPE.

Architecture et validation

DeployCenter.ps1 orchestre les modules : UI.psm1 porte les workflows et contrôles d’interface dans le scope de session partagé, ThemeManager.psm1 charge les palettes, HardwareInventory.psm1 collecte et exporte les informations matérielles, Partitioning.psm1 valide les profils et calcule les capacités, WindowsSources.psm1 analyse les images Windows, et Deployment.psm1 applique le profil puis déploie l’image.

La syntaxe PowerShell a été vérifiée statiquement. Le déroulement DISM/DiskPart/reagentc et le démarrage UEFI restent à valider sur la machine WinPE cible avant le premier déploiement réel.

Mot de passe UltraVNC de test

Dans DeployCenter.ini, ajoutez la section suivante. Un champ Password non vide est utilisé tel quel au lieu de générer un mot de passe aléatoire ; createpassword64.exe continue à le convertir dans le format attendu par UltraVNC. Laissez Password= vide pour conserver le comportement par défaut.

[UltraVNC]
Password=MonMotDePasseDeTest

Le mot de passe est stocké en clair dans DeployCenter.ini : utilisez cette option uniquement dans un environnement de test protégé.

Taille de la partition WinRE

La taille configurée par défaut est de 1 Go (1024 Mo). Elle peut être remplacée dans DeployCenter.ini, sous [Partitioning], par WinRESizeMB=1536 par exemple. La valeur doit être un entier strictement positif. Après l’application de Windows, DeployCenter vérifie la taille réelle de winre.wim : le déploiement échoue seulement si l’espace libre ne permet pas de copier le fichier. Une partition plus petite que 990 Mo ou un espace libre après copie inférieur à 250 Mo génère un avertissement, puis le déploiement continue.

Historique récent

  • Le clean et la création des partitions sont exécutés en deux étapes DiskPart ; Update-HostStorageCache actualise les objets Storage entre les deux, puis après le partitionnement, les retraits de lettres et le mountvol /D de la source, avant les contrôles concernés. Si le cmdlet est indisponible dans WinPE, le déploiement continue avec un avertissement.
  • Le choix « Avec OOBE » ne génère ni n’applique de fichier de réponses et masque la saisie du nom d’hôte. Les profils Unattend/Profiles/*.psd1 alimentent le menu de la page principale ; le profil LocalAdmin configure le nom de machine et crée un compte local de la configuration [Unattend], sans activer le compte intégré Administrator.
  • Chaque profil Unattend déclare Target = 'Workstation' ou Target = 'Server'. Le menu propose les profils correspondant à l’édition retenue (le nom contenant « Server » sélectionne la catégorie serveur) ; avant le choix d’une édition, seul « Avec OOBE » est disponible.
  • L’indication « Environnement : WinPE » a été retirée de l’écran principal. Le bloc d’informations PC est moins haut et le bloc de préparation est remonté/compacté afin de dégager les boutons d’action sur les petites résolutions.
  • Le template Workstation renseigne les paramètres régionaux français et répond aux pages OOBE de licence, inscription OEM, compte en ligne, réseau sans fil et paramètres express. Le compte local est fourni dans UserAccounts; les paramètres SkipMachineOOBE et SkipUserOOBE ne sont pas utilisés.
  • À la fin d’un déploiement réussi, la boîte de confirmation propose le redémarrage WinPE avec une case cochée par défaut. Si elle reste cochée, DeployCenter ferme ses ressources, arrête VNC, démonte l’image source puis demande le redémarrage via wpeutil.
  • Compatibilité Windows PowerShell 5.1 : les chaînes de diagnostic de Unattend.psm1 évitent les apostrophes intégrées et le module est enregistré en UTF-8 avec BOM.
  • Le groupe local du compte est configuré avec le nom neutre Administrators, que Windows traduit selon la langue de l’image ; cela évite de dépendre du libellé français Administrateurs.
  • Les réponses specialize et oobeSystem sont placées dans Windows\Panther\Unattend\Unattend.xml pour être traitées par Windows Setup au premier démarrage. Le mot de passe du compte local provient de AdminPasswordBase64 (Base64 UTF-16LE, réversible) et n’est jamais ajouté au journal.
  • La vérification du retrait des lettres EFI/WinRE s’appuie sur l’existence réelle des chemins de lecteur : dans WinPE, Get-Partition peut conserver une lettre Recovery dans ses métadonnées alors que mountvol et le système de fichiers confirment son retrait.
  • La lecture du magasin BCD accepte le libellé français identificateur de bcdedit en plus du libellé anglais identifier, pour retrouver l’entrée Windows hors ligne dans un WinPE francophone.
  • Correction du pipeline de diagnostic des lettres EFI/WinRE pour rester compatible avec le parseur Windows PowerShell 5.1.
  • DiskPart attribue la lettre temporaire de WinRE avant d’appliquer son type Recovery et ses attributs GPT, conformément à l’ordre des exemples Microsoft. En fin de déploiement réussi, la lettre est retirée en sélectionnant explicitement la partition ; Get-Partition peut ne pas exposer sa lettre dans WinPE.
  • Correction du texte de diagnostic WinRE pour éviter une apostrophe typographique dans une chaîne délimitée par apostrophes simples sous Windows PowerShell 5.1.
  • L’activation hors ligne de WinRE utilise désormais le GUID de l’entrée Windows relevé dans le magasin BCD créé par bcdboot, conformément aux paramètres REAgentC disponibles dans WinPE.
  • Le suivi de progression avec Start-Process est réservé à dism.exe /Apply-Image. Les autres commandes natives, y compris DISM hors application d’image, sont invoquées directement, leurs sorties sont journalisées et leur code est lu dans $LASTEXITCODE.
  • En fin de déploiement réussi, seules les lettres temporaires des partitions EFI et WinRE sont retirées. Les lettres Windows et Data définies par le profil restent attribuées ; en cas d’échec, le nettoyage ne retire aucune lettre pour préserver l’état utile au diagnostic.
  • Correction du retour du plan de partitionnement : conversion explicite de la liste générique en tableau pour éviter une erreur de types sous Windows PowerShell 5.1 avant l’exécution de DiskPart.
  • Sous certains WinPE, le code de sortie de DiskPart peut être absent malgré une exécution réussie. DeployCenter confirme désormais le partitionnement et le retrait des lettres en relisant l’état des partitions.
  • Remplacement de l’apostrophe typographique de « d’hôte » par une apostrophe ASCII simple dans le message de validation NetBIOS de Deployment.psm1.
  • Correction de la chaîne du journal DiskPart : les apostrophes typographiques dans une chaîne PowerShell délimitée par apostrophes simples provoquaient une erreur de syntaxe signalée plus loin dans le fichier.
  • Vérification des lettres de partition par requête directe Get-Partition -DriveLetter, puis contrôle du numéro de disque, afin de ne pas dépendre des lettres présentes dans l’instantané retourné par Get-Partition -DiskNumber sous WinPE.
  • La partition Recovery, marquée cachée par ses attributs GPT, peut ne pas être exposée par Get-Partition -DriveLetter. DeployCenter l’associe alors à sa position dans les partitions fraîchement créées par DiskPart.
  • Les partitions EFI et Recovery pouvant être absentes des requêtes Get-Partition -DriveLetter dans WinPE, l’association des rôles suit désormais l’ordre des partitions créées et vérifie l’accès effectif à chaque lettre temporaire.
  • Retrait de l’ajout automatique de /ScratchDir aux commandes DISM afin de tester le comportement sans cette redirection dans WinPE ; le journal DISM dédié est conservé.
  • La progression de l’application d’image lit maintenant les pourcentages émis par DISM pendant son exécution et les transmet à la barre WinForms. Si le code de sortie DISM est absent, le message de réussite explicite est aussi pris en compte.
  • Le pourcentage DISM est aussi affiché dans le libellé de l’étape de progression, sans ajouter de ligne de journal à chaque mise à jour.
  • Vérification de l’espace WinRE via System.IO.DriveInfo : Get-Volume -DriveLetter ne trouve pas toujours les volumes de récupération cachés dans WinPE, même lorsqu’ils sont montés et accessibles.
  • Le déploiement échoue uniquement si l’espace libre est insuffisant pour copier winre.wim. Les recommandations Microsoft de 990 Mo pour la partition et 250 Mo libres après copie produisent un avertissement et n’interrompent pas l’installation.
  • Sous certains WinPE, bcdboot peut confirmer la création des fichiers de démarrage sans que Start-Process fournisse son code de sortie. DeployCenter accepte alors le résultat si la sortie confirme la création ou si le magasin BCD est présent sur la partition EFI.
  • Correction du message de confirmation bcdboot et simplification des messages natifs ; les erreurs de parseur signalées plus loin étaient des conséquences de cette chaîne non terminée.
  • Rétablissement du BOM UTF-8 de Deployment.psm1, requis pour que Windows PowerShell 5.1 lise correctement les caractères accentués dans WinPE.
  • Décodage des sorties natives avec l’encodage de la console WinPE pour préserver les accents ; REAgentC est désormais recherché dans l’image Windows hors ligne avant WinPE.
  • Recherche de REAgentC reportée après l’application de Windows, lorsque C:\Windows\System32\reagentc.exe existe effectivement.
  • La configuration WinRESizeMB et les profils acceptent désormais toute taille strictement positive ; le seuil recommandé de 990 Mo est évalué après application de Windows comme avertissement, sans bloquer la configuration.

Correctifs v3

  • En-têtes du tableau des éditions Windows avec une couleur dédiée définie par le thème (TableHeader).
  • Sélection unique explicite dans la liste des éditions et dessin de la sélection basé sur l'élément réellement sélectionné.

Correctif v12 — pied de page

  • La fenêtre principale affiche l'adresse IP de déploiement et le mot de passe UltraVNC dans son pied de page.
  • Le pied de page commun reste activé par défaut ; le paramètre -ShowFooter $false permet de le masquer dans la fenêtre « Éditions Windows ». Les autres fenêtres conservent leur comportement habituel.

Correctif v15 — pied de page cohérent

  • Le pied de page commun affiche par défaut l’adresse IP et le mot de passe VNC dans toutes les fenêtres qui l’utilisent.
  • Seule la fenêtre de sélection « Éditions Windows » masque entièrement le pied de page via -ShowFooter $false.

Alternance des lignes des tableaux

Les tableaux utilisent une alternance paire/impaire définie dans chaque thème (TableRowEven et TableRowOdd). La sélection conserve la couleur d’accent du thème. Les valeurs sont partagées par les fenêtres Sources Windows et Éditions Windows.

Paramètre de démarrage VNC (v18)

  • Sans paramètre : UltraVNC ne démarre pas.
  • Avec -vnc : UltraVNC démarre.

Exemple : powershell.exe -ExecutionPolicy Bypass -File .\DeployCenter.ps1 -vnc

Options de lancement

  • Sans paramètre : UltraVNC n'est pas démarré.
  • Avec -Vnc (alias PowerShell utilisable sous la forme -vnc) : UltraVNC est démarré.
  • Les fenêtres sont non redimensionnables par défaut via Set-DeployCenterFormSizing; passer -Resizable à cette fonction commune pour autoriser le redimensionnement.

Module VNC

La gestion d'UltraVNC est isolée dans Modules/VNC.psm1. Le fichier est chargé par dot-sourcing uniquement lorsque -Vnc est fourni, afin de conserver le contexte partagé de DeployCenter.

  • Sans -Vnc, UltraVNC ne démarre pas et DeployCenter ne demande pas la désactivation du pare-feu.
  • Avec -Vnc, le module VNC exécute wpeutil DisableFirewall avant de lancer UltraVNC. Cette commande désactive le pare-feu WinPE dans son ensemble ; utilisez cette option sur un réseau de déploiement maîtrisé.
  • Le démarrage VNC et les erreurs sont consignés dans le journal DeployCenter.

Modules

  • Modules/Network.psm1 : détection de l’adresse IPv4 de déploiement, utilisée par le pied de page et le nom du journal.
  • Modules/Logging.psm1 : initialisation et écriture des journaux. L’adresse IPv4 détectée lui est transmise par le script principal.
  • Modules/Configuration.psm1 : lecture de DeployCenter.ini en lecture seule.
  • Modules/ThemeManager.psm1 : chargement et validation des palettes déclarées dans Themes/*.psd1.
  • Modules/UI.psm1 : contrôles, boîtes de dialogue, fenêtres Sources Windows et workflows d’interface.
  • Modules/HardwareInventory.psm1 : collecte matérielle, sélection d’un disque et export consolidé de l’inventaire.
  • Modules/Partitioning.psm1 : découverte et validation des profils PSD1, calcul de capacité et construction de l’état de dimensionnement.
  • Modules/Deployment.psm1 : orchestration du partitionnement et de l’installation Windows pour les profils UEFI/GPT.
  • Modules/Unattend.psm1 : découverte des profils de réponses Windows, validation de leur configuration et génération du XML utilisé au premier démarrage.
  • Modules/WindowsSources.psm1 : recherche de supports Windows et lecture des éditions WIM/ESD.

Profils de partitionnement

Les fichiers PSD1 de Partitioning/Profiles décrivent les schémas de partitionnement comme des données, sans exécuter de code contenu dans les profils. Le profil par défaut « UEFI / GPT — WinRE avant C: » crée EFI (300 Mo), MSR (16 Mo), WinRE (taille définie dans DeployCenter.ini, 1 Go par défaut), puis Windows sur l’espace restant. Le profil « UEFI / GPT — WinRE, C: et D: » demande la taille de C: et attribue le reste à D:, dans l’ordre physique C: puis D:. Les propriétés de taille déclarées dans le profil alimentent un formulaire générique.

Le bouton « Installer » demande une confirmation explicite avant d’effacer le disque sélectionné. Le flux vérifie le firmware, crée les partitions définies par le profil, applique l’image avec DISM, vérifie que WinRE tient dans sa partition, configure le nom d’hôte, crée les fichiers de démarrage UEFI et active WinRE. L’absence d’espace pour copier winre.wim interrompt le déploiement ; le non-respect des recommandations de taille et d’espace libre génère un avertissement. Les opérations longues affichent une fenêtre de progression et sont consignées dans le journal. Le moteur actuel prend en charge les profils UEFI/GPT et requiert une image contenant Windows\System32\Recovery\winre.wim.

Historique des changements

2026-10-17

  • Correction de l’échappement des arguments des commandes natives Windows. Les chemins terminés par une barre oblique inverse, comme W:\, ne ferment plus prématurément leur guillemet ; cela permet à mountvol de recevoir correctement sa lettre et le chemin de volume.
  • L’affectation temporaire d’une lettre source vérifie l’accès effectif au fichier WIM après mountvol, afin de gérer les environnements WinPE qui ne remontent pas correctement son code de sortie.
  • Le point de montage DISM temporaire est créé à la racine du lecteur système WinPE plutôt que sous %TEMP%\DeployCenter, après l’échec d’accès DISM dans ce dernier emplacement ; la libération de la lettre source est confirmée par l’inaccessibilité du WIM après mountvol /D.
  • La taille de WinRE est lue en montant l’édition sélectionnée avec DISM en lecture seule, pour les sources .wim comme .esd, puis en démontant l’image sans modification. Cette méthode remplace l’extraction directe de winre.wim, qui remplissait le disque RAM WinPE (erreur WIMGAPI 112).
  • Remplacement de cette lecture préalable par une taille WinRE configurable dans [Partitioning] WinRESizeMB (1024 Mo par défaut). Le profil réserve cette taille sans monter ni extraire install.wim ; après l’application de Windows, DeployCenter mesure winre.wim et arrête la configuration WinRE si la partition est inférieure à 990 Mo ou ne conserverait pas 250 Mo libres après copie.
  • Correction de la fermeture du callback de progression : le callback de journalisation est maintenant capturé explicitement avant GetNewClosure(), afin qu’il reste accessible depuis le scope de l’action de progression.
  • Pour la préparation DISM, une source ISO exposée sous un chemin de volume GUID reçoit temporairement une lettre libre autre que C: ou D:. DISM reçoit aussi son répertoire temporaire et son propre journal pour faciliter le diagnostic des erreurs de montage.
  • Resserrement de l’espacement dans la confirmation d’effacement pour rapprocher l’avertissement du nom d’hôte.
  • Ajout du flux intégré « Installer » : confirmation avant effacement, tailles des partitions calculées depuis le profil, application DISM, configuration du nom d’hôte, fichiers de démarrage UEFI et activation de WinRE.
  • Création de Modules/Deployment.psm1 pour isoler l’exécution du déploiement ; ajout dans UI.psm1 des fenêtres thémées de confirmation et de progression. Le nouveau bouton d’installation suit le thème actif.
  • Suppression des objets de résultat de démontage ISO à la fois dans WindowsSources.psm1 et aux appels UI, afin qu’ils ne s’affichent pas dans la console PowerShell.
  • Prise en charge des volumes ISO exposés par WinPE sans objet partition : recherche via le chemin de volume (GUID), puis libération de D: avec mountvol si cette lettre est attribuée à l’ISO.
  • Recherche de install.wim/install.esd à partir des volumes associés explicitement à l’ISO, puis association de chaque volume à sa partition.
  • Le montage ISO réutilise une lettre déjà attribuée si elle n’est ni C: ni D: ; si WinPE a attribué l’une de ces lettres, elle est retirée avant l’affectation temporaire.
  • Correction des appels Add-PartitionAccessPath et Remove-PartitionAccessPath : avec -InputObject, la lettre du lecteur doit être fournie comme -AccessPath pour respecter leurs jeux de paramètres.
  • Résolution du disque ISO par Get-Disk -Number à partir de MSFT_DiskImage.Number, sans pipeline ambigu dans certaines versions de WinPE.
  • Correction de l’association entre un ISO monté et son disque dans WinPE : résolution via Get-DiskImage | Get-Disk plutôt que par le chemin \\.\CDROMn.
  • Le montage ISO n’attribue plus de lettre automatiquement : une lettre temporaire disponible est choisie en excluant C: et D:. Une barre d’activité apparaît pendant l’analyse des éditions.
  • Renommage de la commande de nettoyage du montage ISO avec le verbe PowerShell approuvé Dismount, pour supprimer l’avertissement à l’import du module WindowsSources.
  • Le montage d’un ISO reste actif tant qu’il est la source Windows sélectionnée ; il est libéré après analyse annulée, remplacement par une autre source, erreur ou fermeture de DeployCenter.
  • Le callback de journalisation utilise INFO lorsque le niveau est omis ou vide, afin d’éviter une erreur de validation ValidateSet au démarrage.
  • Correction du callback de journalisation au démarrage : il conserve désormais le scope du script principal pour résoudre Write-Log depuis les événements WinForms. Les derniers appels directs de DeployCenter.ps1 passent aussi par ce callback.

2026-10-15

  • Les anciens exports de HardwareInfo.ps1 ont d’abord été déplacés sous %TEMP%\DeployCenter, puis retirés au profit du seul inventaire consolidé décrit ci-dessous.

  • L’affichage des disques a d’abord utilisé InterfaceType, puis a été corrigé pour afficher BusType obtenu par Get-Disk.

  • Le module VNC réutilise l’adresse IPv4 détectée au démarrage ; la détection réseau n’est plus relancée lors du démarrage de VNC.

  • Les messages d’information et d’erreur utilisent maintenant Show-DeployCenterMessage dans Modules/UI.psm1, avec la palette active, au lieu des boîtes de dialogue natives de Windows.

  • Les erreurs de démarrage VNC indiquent maintenant l’étape concernée pour distinguer les échecs de nettoyage, de copie, de pare-feu et de lancement.

  • La sortie de wpeutil DisableFirewall et son code de retour sont consignés dans le journal DeployCenter au lieu d’apparaître dans la console PowerShell.

  • Le libellé de statut de la fenêtre Sources Windows est remonté et sa hauteur réduite pour mieux le séparer du pied de page.

  • L’inventaire matériel, l’adresse IP et les informations VNC sont réunis dans %TEMP%\DeployCenter\DeployCenter_Inventory.json. Les exports distincts HardwareInfo.json, hardware.json et hardware.log ne sont plus générés.

  • Les anciens fichiers temporaires peuvent rester jusqu’au redémarrage de WinPE, qui vide %TEMP%.

  • La collecte complète des disques utilise maintenant Get-Disk : numéro, nom, taille, type de bus, état opérationnel et état de santé. Win32_DiskDrive n’est plus utilisé pour l’inventaire des disques.

  • La détection IPv4 de Modules/Network.psm1 utilise les API .NET System.Net.NetworkInformation au lieu de Get-CimInstance Win32_NetworkAdapterConfiguration ; la priorité aux interfaces avec passerelle et les exclusions d’adresses restent en place.

  • Ajout du chargement et de la validation de profils de partitionnement PSD1, ainsi que d’un sélecteur dans l’interface. Le profil UEFI/GPT place EFI, MSR et WinRE avant Windows, qui reçoit l’espace restant ; aucun script DiskPart n’est exécuté à cette étape.

  • Ajout du BOM UTF-8 aux nouveaux fichiers PowerShell et PSD1 pour préserver les caractères accentués lors de leur lecture par Windows PowerShell 5.1.

  • Correction de l’apostrophe dans la description du profil UEFI/GPT, qui empêchait le chargement du fichier PSD1.

  • Ajout du profil UEFI/GPT avec C: et D:. Les politiques de taille du PSD1 pilotent un formulaire générique : saisie de C: et calcul de D: comme espace restant estimé. Le profil place C: avant D:.

  • Correction d’une syntaxe PowerShell incompatible dans les filtres de politique de taille du profil, qui empêchait le lancement du script.

  • Correction du message de sélection du disque : son apostrophe typographique fermait prématurément une chaîne PowerShell et bloquait l’analyse du script.

  • Correction du placement d’un libellé du formulaire C:/D: : l’expression de coordonnées était interprétée comme un troisième argument du constructeur Point. Le profil PSD1 reçoit un BOM UTF-8 et utilise des guillemets doubles autour de sa description, qui contient une apostrophe typographique.

  • Le formulaire du profil C:/D: recalcule D: pendant la saisie de C: et accepte désormais une taille minimale de 40 Go pour C:.

  • Réorganisation de la première page : sélection du disque, du système, du profil et du nom d’hôte dans le panneau de préparation ; le journal est accessible dans une fenêtre dédiée depuis la barre d’actions. Les nouveaux contrôles et la fenêtre du journal sont construits dans UI.psm1 et suivent le thème actif.

  • Intégration du nouveau panneau de préparation dans la fenêtre principale : le profil est activé après la sélection d’une édition Windows, et le journal est ouvert depuis le bouton placé à gauche des actions principales.

  • Le journal reste alimenté par Logging.psm1 ; UI.psm1 fournit uniquement sa fenêtre thémée et son contrôle d’affichage.

  • Le libellé du système sélectionné conserve la couleur de statut du thème et tronque les chemins longs sans déformer le panneau.

  • Le constructeur de ComboBox accepte une collection vide à l’initialisation du sélecteur de disque, ensuite alimentée par l’inventaire matériel.

  • Le champ du nom d’hôte est dimensionné pour un nom NetBIOS et limite la saisie à 15 caractères.

  • Le champ du nom d’hôte est aligné à droite du panneau avec un espacement réservé après son libellé afin d’éviter tout chevauchement.

  • Dans Sources Windows, le double-clic sur une ligne sélectionnée lance aussi l’affichage des éditions, comme le bouton dédié.

  • Après validation d’une édition Windows, la fenêtre Sources Windows se ferme pour revenir directement à l’écran principal.

  • Extraction de la recherche, de la lecture des éditions et de la résolution des images Windows vers Modules/WindowsSources.psm1. DeployCenter.ps1 charge ce module après l’initialisation du journal.

  • Le module Sources Windows reçoit explicitement un callback de journalisation fourni par Logging.psm1, sans dépendre implicitement de la portée du script principal.

  • Déplacement dans UI.psm1 des constructeurs génériques de labels, groupes et boutons, du pied de page de session et du réglage de fenêtre. Les fonctions reçoivent explicitement thème, police et données de session.

  • Extraction dans UI.psm1 de la sélection du logo selon le thème et de son remplacement ; chemins et PictureBox sont transmis en paramètres.

  • Création de Modules/Configuration.psm1 : la lecture de DeployCenter.ini est isolée et retourne un objet de préférences sans modifier le fichier.

  • Répartition des fonctions restantes : workflows de fenêtre et de thème dans UI.psm1, préférences dans Configuration.psm1, collecte/export/lecture disque dans HardwareInventory.psm1. Les profils et calculs de capacité restent dans Partitioning.psm1.

  • Configuration.psm1 renvoie désormais un objet de configuration avec des valeurs par défaut et ne dépend plus de variables script externes.

  • HardwareInventory.psm1 exporte la collecte et l’export avec des paramètres explicites ; HardwareInfo.ps1 reste un point d’entrée de compatibilité.

  • Nettoyage des espaces en fin de ligne dans les modules UI et Partitioning après leur déplacement.

  • Partitioning.psm1 construit désormais l’état des tailles choisi à partir du profil, du disque et du résultat du dialogue UI.

  • Ajout du BOM UTF-8 aux nouveaux fichiers PowerShell pour Windows PowerShell 5.1 et tolérance de l’absence temporaire d’inventaire lors de la résolution d’un disque.

  • Mise à jour de la description d’architecture et de la liste des modules après l’extraction des fonctions restantes.

  • Correction des appels d’export d’inventaire depuis le module VNC : les chemins requis et les données de session sont transmis explicitement, sans invite interactive au lancement.

  • Les workflows UI et VNC transmettent désormais leurs messages au callback de Logging.psm1, sans appeler Write-Log directement depuis leurs scopes.