DeployCenter peut être stocké dans un partage en lecture seule Désactivation de l'hibernation via l'unattend Désactivation de la mise en veille lorsque le pc est sur secteur L'installation unattend empêche bitlocker de s'activer (pas de clé stockée en lieu sûr hors domaine et azure en automatique). Cela n'empêche pas de l'activer en connaissance de cause par la suite.
48 KiB
DeployCenter — v1.0.0
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/DriverManagement.psm1: recherche des packs de pilotes correspondant au constructeur, au modèle et à l’édition Windows.Modules/Unattend.psm1: découverte et validation des profils de réponse Windows, puis génération sécurisée du XML.Modules/Localization.psm1etLocales/*.psd1: sélection de la langue depuis la culture UI de WinPE et ressources françaises/anglaises.Themes/Light.psd1etThemes/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
Déploiement sans interaction
Le mode -NonInteractive choisit les mêmes profils et exécute le même flux de déploiement que l’interface, avec une fenêtre de progression. Il exige que toutes les décisions de la première page soient fournies et que l’effacement du disque soit confirmé explicitement. Les paramètres sont :
-DiskNumber: numéro du disque physique de destination.-ImagePath: chemin d’un ISO, WIM, ESD ou dossier de sources Windows.-EditionIndex: index de l’édition dans l’image.-PartitionProfileId: ID du profil PSD1 dansPartitioning/Profiles.-UnattendProfileId: ID du profil dansUnattend/Profiles, ouOOBEpour laisser Windows présenter l’expérience de première ouverture sans fichier Unattend.-HostName: requis si le profil Unattend configure le nom de la machine.-CSizeGB: requis pour un profil qui demande la taille de C: ; le reste est attribué à D:.-ConfirmDiskErase: confirmation obligatoire, puisque le disque choisi est entièrement effacé.-RestartWhenComplete: demande un redémarrage automatique après succès. Celui-ci est annulé si les recommandations WinRE ne sont pas respectées.-CopyLocally: copie localement les éléments indiqués avant DISM. Valeurs acceptées :Sources,Drivers, ou les deux. Sans ce paramètre, DISM utilise directement les chemins sources pour l’image Windows et les pilotes.
Exemple avec le profil de partitionnement C:/D: et le profil OEMInstallation :
powershell.exe -ExecutionPolicy Bypass -File .\DeployCenter.ps1 `
-NonInteractive -DiskNumber 0 `
-ImagePath 'Y:\Windows11.iso' -EditionIndex 6 `
-PartitionProfileId 'UEFI-GPT-WinRE-C-D' -CSizeGB 80 `
-UnattendProfileId 'OEMInstallation' -HostName 'POSTE-001' `
-ConfirmDiskErase -RestartWhenComplete -CopyLocally Sources,Drivers
Pour laisser Windows gérer OOBE, remplacer les paramètres de profil et de nom d’hôte par -UnattendProfileId OOBE. La commande retourne le code de processus 0 en cas de succès et 1 si la préparation ou le déploiement échoue. Après une tentative d’installation, le journal complet est copié à la racine de C:\, en cas de succès comme d’échec ; l’original reste dans %TEMP%\DeployCenter jusqu’au redémarrage de WinPE.
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.
Localisation
DeployCenter utilise la langue d’interface exposée par WinPE au démarrage : les cultures françaises chargent Locales/fr-FR.psd1, les autres chargent Locales/en-US.psd1. L’anglais est la langue source des textes de l’application ; fr-FR.psd1 en fournit la traduction française. Les textes produits par DeployCenter dans l’interface et dans son journal sont traduits ; les lignes émises par DISM, DiskPart, reagentc et les autres commandes système restent dans leur langue d’origine. Il n’y a pas de sélecteur de langue ni de clé de langue à configurer dans DeployCenter.ini.
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.
Paramètres Unattend facultatifs
Sous [Unattend], SupportProvider définit le nom du fournisseur, SupportURL désigne une page Web d’assistance complète (par exemple https://support.example.org) et SupportAppURL désigne le protocole d’une application d’assistance installée (par exemple monapp-support:). Ces paramètres sont facultatifs et omis lorsqu’ils sont vides. Par compatibilité, une ancienne URL HTTP(S) placée dans SupportAppURL est générée comme SupportURL. WallpaperPath désigne l’image .png, .jpg ou .bmp à utiliser dans le thème Windows par défaut ; le chemin peut être absolu ou relatif au dossier DeployCenter. Assets\blorand.png est la valeur par défaut et une valeur vide laisse le fond Windows inchangé. Le fond est appliqué aux déploiements avec profil Unattend ; « Avec OOBE » reste sans fichier Unattend. Le template OEMInstallation.xml utilise fr-FR pour InputLocale.
Pour produire AdminPasswordBase64, lancer powershell.exe -ExecutionPolicy Bypass -File .\DeployCenter.ps1 -EncodeUnattendPassword, saisir le mot de passe dans l’invite masquée, puis copier la valeur Base64 affichée dans DeployCenter.ini. Pour le champ LocalAccount/Password avec PlainText=false, Windows SIM ajoute le suffixe littéral Password au mot de passe avant de convertir le tout en UTF-16LE puis en Base64. Base64 est réversible et ne chiffre pas le secret ; protéger le fichier INI en conséquence.
Historique récent
- Les journaux de session sont maintenant créés sous
%TEMP%\DeployCenterparLogging.psm1, afin que le dossier du dépôt puisse être en lecture seule. La copie finale du journal à la racine deC:\est conservée ; les deux manuels et le changelog le précisent. - Le template Unattend
OEMInstallation.xmldéfinitPreventDeviceEncryption=truepour empêcher l’activation automatique du chiffrement de l’appareil par BitLocker. Il désactive aussi l’hibernation et la veille automatique sur secteur. Les deux manuels documentent ces réglages ; le parcours « Avec OOBE » reste sans fichier Unattend. - Correction des chemins d’images dans les deux README : le dépôt suit le dossier
Images/avec une majuscule, nécessaire au rendu Gitea sensible à la casse ; l’espace du nom de fichier est encodé en%20. - Intégration des six captures de
Images/dansREADME.mdetREADME-en.md, aux étapes de sélection des sources, de progression et de fin du déploiement. - Traduction anglaise du manuel utilisateur dans
README-en.md, avec conservation des commandes et identifiants de profils. -CopyLocallypeut désormais être utilisé seul avec l’interface interactive ; les autres paramètres de déploiement en ligne de commande restent réservés à-NonInteractive.- La ligne de progression pour l’application Windows affiche désormais un libellé complet dès l’ouverture de la fenêtre ; elle est ensuite remplacée par le message précis avec la lettre du lecteur lorsque DISM démarre.
- Création de
README.mdavec la présentation de DeployCenter, ses prérequis, son manuel de déploiement interactif et automatisé, la configuration, les pilotes et le dépannage. - Ajout du paramètre
-CopyLocally(Sources,Drivers) : les sources sont utilisées directement par DISM par défaut ; les éléments choisis sont copiés par Robocopy sur la partition Windows avant traitement. Les contrôles d’espace et le calcul de taille des pilotes ne portent que sur les éléments à copier. La progression n’affiche les étapes de copie que lorsqu’elles sont demandées, et le journal précise quand DISM utilise directement une source. - L’en-tête de la fenêtre de déploiement et celui de la page principale sont construits par le même composant UI. La fenêtre de déploiement reprend le logo, le titre et le sous-titre, sans le sélecteur de thème ; la progression conserve son intitulé sous cet en-tête et compacte les étapes pour tenir en 800×600.
- Les commandes natives sans pourcentage laissent la boucle WinForms traiter ses événements et leur code de sortie est écrit par un lanceur PowerShell temporaire, plutôt que lu depuis l’objet processus qui était vide dans certains WinPE. Si le code natif ne peut pas être récupéré, DeployCenter échoue avec un diagnostic explicite.
- DISM
/Add-Driveret les opérationsmountvolpendant l’installation transmettent aussi le callback UI au lanceur, afin que le chrono continue de s’actualiser pendant leur attente. - L’étape active affiche le temps écoulé depuis son démarrage, à côté du pourcentage lorsqu’une progression réelle est disponible. Les commandes natives sans pourcentage laissent la boucle WinForms traiter ses événements pendant leur exécution, sans analyser leur sortie pour en extraire un progrès ; le pourcentage reste réservé à DISM
/Apply-Imageet aux copies Robocopy. - La fenêtre de progression conserve désormais le logo actif de l’application dans son en-tête. L’en-tête est pris en compte dans le calcul de la zone des étapes, dont les lignes sont compactées pour rester visibles en 800×600, en mode plein écran comme avec
-Windowed. - La copie des pilotes locaux suit maintenant celle de l’image Windows et précède son application. Les fichiers de l’image et du pack cohabitent donc temporairement sur C: ; l’espace libre est vérifié pour leur taille cumulée.
C:\DeployCenterest supprimé en une seule étape à la fin du déploiement. - En mode normal, la progression occupe l’écran et reprend le pied de page DeployCenter ; les lignes compactes tiennent sans défilement sur un écran 800×600. Avec
-Windowed, elle reste centrée, adaptée à la fenêtre principale et dimensionnée pour afficher les étapes sans défilement lorsque la fenêtre principale couvre l’écran. - Le libellé de l’étape active reprend maintenant le texte localisé complet du message de déploiement, y compris les détails dynamiques comme la lettre du lecteur cible (
C:) pendant l’application de Windows. - Déclaration préalable de la propriété
UpdateActiondans l’objet de progression ; Windows PowerShell 5.1 ne permet pas d’ajouter cette propriété après la création duPSCustomObject. - La fenêtre de progression adapte sa taille à la zone d’écran et utilise des lignes plus compactes, tout en conservant le défilement pour les étapes nombreuses. Son callback encapsule aussi l’action d’actualisation dans l’objet UI afin qu’elle reste accessible depuis la portée isolée créée par
GetNewClosure()sous Windows PowerShell 5.1. - La fenêtre de déploiement affiche toutes les étapes à venir et terminées, avec la durée observée pour chacune. DISM
/Apply-Imageet les copies Robocopy affichent leur pourcentage réel ; les autres étapes indiquent « En cours… ». Après réussite, cette même fenêtre conserve le récapitulatif et présente le message final, la case de redémarrage et le bouton OK ; elle ne se ferme qu’après validation. - La copie de
winre.wimvers la partition de récupération utilise maintenant Robocopy avec progression et vérification de la taille ; un code de sortie Robocopy d’échec ou une copie incomplète interrompt la configuration WinRE. - La copie Robocopy reste suivie en progression sans journaliser chaque ligne de pourcentage. Son code de sortie est récupéré par un petit processus PowerShell enfant qui l’écrit dans un fichier temporaire ; si ce code reste indisponible, DeployCenter compare les fichiers source et destination (chemins et tailles) avant de poursuivre, et bloque en cas de différence.
- Le parseur de la sortie
bcdeditutilise maintenant le libelléidentifierfourni par la localisation active (identifieren anglais,identificateuren français), au lieu d’inclure les deux formes dans le code. - Le libellé de secours « Preparing deployment… » est désormais localisé dès l’ouverture de la progression, y compris avant la réception du premier message d’étape.
- Traduction complète de l’indication de recherche des pilotes affichée avant la sélection d’une édition Windows.
- Les libellés et les valeurs fixes de la confirmation d’effacement (disque, profil, édition, tailles et configuration initiale) utilisent désormais les ressources de localisation ; les tailles C:/D: et l’espace restant affichent aussi l’unité traduite.
- Renommage du profil Unattend en anglais idiomatique :
OEMInstallation.psd1, IDOEMInstallationet templateOEMInstallation.xml; l’exemple de déploiement sans interaction utilise le nouvel ID. - Les intitulés des profils Unattend et le choix « Use OOBE » passent par la localisation avant leur affichage ; le profil OEM active NumLock sur l’écran d’ouverture de session et dans le profil utilisateur par défaut.
- Correction du message d’erreur de sélection d’un profil Unattend pour qu’il soit entièrement rédigé en anglais et localisable.
- Correction des accents manquants dans plusieurs traductions de
Locales/fr-FR.psd1. - Ajout de la localisation française/anglaise selon la culture UI de WinPE. Les chaînes de l’interface, les statuts et les messages applicatifs consignés par DeployCenter sont traduits ; la sortie brute des commandes système reste inchangée.
- L’anglais devient la langue source des textes, commentaires, profils et exemples de configuration du code ;
Locales/fr-FR.psd1fournit la traduction de l’interface et des messages DeployCenter. - La copie des pilotes de déploiement utilise Robocopy avant leur injection DISM depuis
C:\DeployCenter\Drivers; les durées de copie et d’injection sont journalisées séparément. - L’image sélectionnée (
install.wimouinstall.esd) est copiée par Robocopy versC:\DeployCenter\Sourcesavant/Apply-Image. La progression de cette copie mono-fichier est remontée en pourcentage ; DeployCenter supprime ensuite le fichier temporaire, y compris si l’application DISM échoue. Les codes Robocopy 0 à 7 sont traités comme des résultats sans échec. - La fenêtre de confirmation d’effacement est élargie et son bouton rouge dispose d’une largeur de 134 px ; son libellé « Effacer et installer » tient maintenant sur une seule ligne.
- Correction du générateur
-EncodeUnattendPassword: Windows SIM encode pourLocalAccount/Passwordle mot de passe suivi du suffixe littéralPassword, en UTF-16LE puis Base64. La valeur actuelle deDeployCenter.inia été régénérée avec ce format après l’échecFailed to decode password (0x8007000d). - La boîte « Confirmer l’effacement du disque » mesure maintenant la hauteur du message et place les boutons en dessous ; les détails du profil Unattend et du nom d’hôte ne coupent plus l’avertissement final.
- Correction de la hauteur du panneau « Préparation du déploiement » pendant le redimensionnement : elle correspond désormais à sa hauteur initiale de 270 px et laisse un espace avant les boutons d’action en bas, notamment à la résolution minimale 800 × 600.
- Ajout du paramètre autonome
-EncodeUnattendPassword: il demande le mot de passe sans l’afficher et renvoie la valeur Base64 UTF-16LE à placer dans[Unattend] AdminPasswordBase64. Les fichiers INI documentent aussi ce format et rappellent qu’il ne chiffre pas le mot de passe. - Ajout de
[Unattend] SupportURLpour les pages Web d’assistance et distinction documentée avecSupportAppURL, réservé au protocole d’une application. Les anciennes valeurs HTTP(S) dansSupportAppURLrestent compatibles et sont générées sousSupportURL. - Analyse des journaux Panther ajoutés dans
Logs: Windows a trouvé et validéC:\Windows\Panther\Unattend\unattend.xml, puis la passespecializes’est terminée avec succès.setuperr.logne signale que « System disks found » pendant la détection WinRE ; les lignes adjacentes indiquent que WinRE est prêt et que la spécialisation WinRE renvoie 0. - Correction de
[Unattend] AdminGroupdans les fichiers INI :Administratorsest le nom neutre requis par Windows Setup, y compris pour une image française. Les noms localisés commeAdministrateursne doivent pas être écrits dansLocalAccount/Group. - Ajout de la recherche automatique de packs de pilotes dans
Drivers/<Constructeur>/<Préfixe modèle ou SKU>/<Version Windows>et de leur injection récursive par DISM après l’application de l’image. La racine est configurable dans[Drivers] RootPath; les liens Lenovo, Dell, HP et Microsoft sont mémorisés dansDeployCenter.iniet son exemple. L’écran principal affiche le chemin inspecté et l’état de détection. DeployCenter.ps1accepte les paramètres-NonInteractive,-DiskNumber,-ImagePath,-EditionIndex,-PartitionProfileId,-UnattendProfileId,-HostName,-CSizeGB,-ConfirmDiskEraseet-RestartWhenCompletepour automatiser le déploiement. La confirmation explicite d’effacement est obligatoire ; les choix et tailles sont validés avant l’appel au déploiement. Le résultat est retourné par le code processus. Après une tentative,Logging.psm1copie le journal à la racine de C: en réussite comme en échec.- La touche Échap ferme désormais la fenêtre « Sources Windows » même lorsque le focus est dans un contrôle enfant.
- La description du profil PSD1
InstallationOEMévite l’apostrophe typographique dans une chaîne entre apostrophes, pour rester analysable sous Windows PowerShell 5.1. - Le profil Unattend
LocalAdmina été renomméInstallationOEM: son ID, son fichier PSD1, son template XML et sa description sont alignés sur son rôle. - Le profil affiché sous le nom « Installation OEM » prépare le nom d’hôte, le compte local et les options OEM. À la fin du déploiement, les avertissements de recommandations WinRE sont rappelés ; la case de redémarrage automatique est décochée s’il y en a.
- Correction de la chaîne d’erreur de validation du chemin du fond d’écran dans
Deployment.psm1: elle est délimitée par des guillemets doubles pour éviter toute ambiguïté d’apostrophe dans Windows PowerShell 5.1. - L’image
Assets/blorand.pngdevient le fond du thème Windows par défaut pour les nouveaux utilisateurs des déploiements utilisant un profil Unattend.[Unattend] WallpaperPathaccepte un chemin absolu ou relatif au dossier DeployCenter ; une valeur vide désactive cette personnalisation. Le mode « Avec OOBE » reste sans fichier Unattend et conserve donc le fond Windows. DeployCenter.ini.exampledocumente désormais toutes les options reconnues parConfiguration.psm1, y comprisSupportProvider,SupportURLetSupportAppURLsous forme de clés explicites vides par défaut.- Le profil
InstallationOEMutilisefr-FRpourInputLocale. Les clés facultatives[Unattend] SupportProvider,SupportURLetSupportAppURLajoutent indépendamment le fournisseur, le site Web et le protocole d’application àOEMInformation; chaque élément est omis lorsque sa clé est absente ou vide. - Le
cleanet la création des partitions sont exécutés en deux étapes DiskPart ;Update-HostStorageCacheactualise les objets Storage entre les deux, puis après le partitionnement, les retraits de lettres et lemountvol /Dde 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/*.psd1alimentent le menu de la page principale ; le profilInstallationOEMconfigure 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'ouTarget = '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ètresSkipMachineOOBEetSkipUserOOBEne 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. - Le libellé « Configuration de première ouverture » a été raccourci d’un pixel en hauteur pour ne plus recouvrir le bord supérieur de sa liste déroulante.
- 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çaisAdministrateurs. - Les réponses
specializeetoobeSystemsont placées dansWindows\Panther\Unattend\Unattend.xmlpour être traitées par Windows Setup au premier démarrage. Le mot de passe du compte local provient deAdminPasswordBase64(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-Partitionpeut conserver une lettre Recovery dans ses métadonnées alors quemountvolet le système de fichiers confirment son retrait. - La lecture du magasin BCD accepte le libellé français
identificateurdebcdediten plus du libellé anglaisidentifier, 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-Partitionpeut 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-Processest 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é parGet-Partition -DiskNumbersous 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 -DriveLetterdans 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
/ScratchDiraux 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 -DriveLetterne 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,
bcdbootpeut confirmer la création des fichiers de démarrage sans queStart-Processfournisse 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
bcdbootet 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.exeexiste effectivement. - La configuration
WinRESizeMBet 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 $falsepermet 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écutewpeutil DisableFirewallavant 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 deDeployCenter.inien lecture seule.Modules/ThemeManager.psm1: chargement et validation des palettes déclarées dansThemes/*.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.
Pilotes matériels
Par défaut, DeployCenter recherche les packs dans Drivers au même niveau que son dossier. La clé [Drivers] RootPath de DeployCenter.ini permet de choisir une autre racine ; une valeur vide conserve le dossier par défaut et un chemin relatif est résolu depuis le dossier DeployCenter. Les clés LenovoURL, DellURL, HPURL et MicrosoftURL mémorisent les pages utiles pour retrouver les packs.
Organisez les dossiers ainsi : Drivers\<Constructeur>\<Préfixe modèle ou SKU>\<Version Windows>\.... Les noms de constructeur reconnus sont Lenovo, Dell, HP et Microsoft. Le préfixe de modèle/SKU est comparé au modèle et au SKU retournés par l’inventaire matériel ; la correspondance la plus spécifique est retenue. Les noms de version reconnus sont Windows 10, Windows 11 et Windows Server <année>. Les fichiers INF peuvent être placés dans des sous-dossiers.
La page principale affiche le chemin examiné et le résultat de la recherche (le chemin complet est aussi disponible en info-bulle). Quand un pack avec des INF est trouvé, DeployCenter le copie après l’application de Windows par Robocopy dans C:\DeployCenter\Drivers, puis exécute DISM /Image:<Windows hors ligne> /Add-Driver /Driver:C:\DeployCenter\Drivers /Recurse. Le dossier temporaire est supprimé après l’injection, y compris si la copie ou DISM échoue. Le journal indique séparément le temps de copie et le temps d’injection. En l’absence de correspondance, le déploiement continue sans injection ; une erreur DISM pendant l’injection fait échouer le déploiement.
Historique des changements
2026-10-17
- Ajout de
SupportURLdans[Unattend]et dans le templateInstallationOEM.xml.SupportURLaccepte l’URL d’un site Web,SupportAppURLle schéma d’une application ; les anciennes valeurs HTTP(S) deSupportAppURLsont converties pour compatibilité. Les journaux Panther indiquent que le fichier Unattend est validé et quespecializeréussit. AdminGroupest fixé àAdministratorsdansDeployCenter.iniet son exemple. Windows Setup exige les noms de groupes neutres anglais avant que la langue de l’interface soit appliquée.- Ajout de
DriverManagement.psm1, d’une clé[Drivers] RootPathet d’URLs constructeur dansDeployCenter.iniet son exemple. La détection utilise fabricant, modèle/SKU et édition Windows ; les packs contenant des INF sont ajoutés à l’image hors ligne par DISM après son application. Le panneau principal montre le chemin recherché et le résultat. - La recherche des dossiers modèle ignore les valeurs Model/SKU absentes et refuse les correspondances ambiguës plutôt que de choisir un pack incertain.
- 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 àmountvolde 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èsmountvol /D. - La taille de WinRE est lue en montant l’édition sélectionnée avec DISM en lecture seule, pour les sources
.wimcomme.esd, puis en démontant l’image sans modification. Cette méthode remplace l’extraction directe dewinre.wim, qui remplissait le disque RAM WinPE (erreur WIMGAPI112). - 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 extraireinstall.wim; après l’application de Windows, DeployCenter mesurewinre.wimet 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.psm1pour isoler l’exécution du déploiement ; ajout dansUI.psm1des 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.psm1et 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
mountvolsi 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-PartitionAccessPathetRemove-PartitionAccessPath: avec-InputObject, la lettre du lecteur doit être fournie comme-AccessPathpour respecter leurs jeux de paramètres. - Résolution du disque ISO par
Get-Disk -Numberà partir deMSFT_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-Diskplutô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
INFOlorsque le niveau est omis ou vide, afin d’éviter une erreur de validationValidateSetau démarrage. - Correction du callback de journalisation au démarrage : il conserve désormais le scope du script principal pour résoudre
Write-Logdepuis les événements WinForms. Les derniers appels directs deDeployCenter.ps1passent aussi par ce callback.
2026-10-15
-
Les anciens exports de
HardwareInfo.ps1ont 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 afficherBusTypeobtenu parGet-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-DeployCenterMessagedansModules/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 DisableFirewallet 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 distinctsHardwareInfo.json,hardware.jsonethardware.logne 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_DiskDriven’est plus utilisé pour l’inventaire des disques. -
La détection IPv4 de
Modules/Network.psm1utilise les API .NETSystem.Net.NetworkInformationau lieu deGet-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.psm1et 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.psm1fournit 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.