Ajout de la langue anglaise
Ajout d'un README.md avec le descriptif et les instructions L'ancien README.md s'appelle désormais CHANGELOG.md Activation du pavé numérique par défaut pour les installations sans assistance Nouveau design pour la fenêtre de déploiement. Ajout de paramètre pour pouvoir procéder à une installation totalement automatisée Ajout de paramètre pour copier au choix sources, drivers ou les deux sur C:\DeployVenter avant leur usage par DISM.
This commit is contained in:
1 parent
cb917c97ce
commit
2212e25d31
26 files changed
+2625
-830
No files matched your search
@@ -1,239 +1,187 @@
|
||||
# DeployCenter — première version de la réécriture
|
||||
# DeployCenter
|
||||
|
||||
## Contenu
|
||||
DeployCenter est un outil PowerShell de préparation et de déploiement de Windows depuis Windows PE (WinPE). Il détecte le matériel, analyse les sources Windows disponibles, propose une édition et un schéma de partitionnement, puis applique Windows et configure le démarrage UEFI et l’environnement de récupération WinRE.
|
||||
|
||||
- `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.
|
||||
L’interface est localisée selon la langue d’interface de WinPE (français ou anglais). Les thèmes, profils de partitionnement et profils Unattend sont chargés depuis des fichiers de données afin de faciliter leur personnalisation.
|
||||
|
||||
## Lancement
|
||||
> **Attention :** l’installation efface entièrement le disque physique sélectionné. Vérifiez soigneusement le numéro, le modèle et la capacité du disque avant de confirmer. Une erreur de sélection entraîne la perte de ses données.
|
||||
|
||||
Depuis le dossier DeployCenter, lancer :
|
||||
## Fonctionnalités
|
||||
|
||||
- Inventaire matériel et informations sur les disques physiques.
|
||||
- Recherche de sources Windows sur les chemins configurés, avec prise en charge des images ISO, WIM et ESD ainsi que des sources extraites.
|
||||
- Sélection de l’édition Windows contenue dans une image.
|
||||
- Profils de partitionnement UEFI/GPT avec WinRE avant C:, avec ou sans partition D:.
|
||||
- Installation de pilotes INF correspondant au constructeur, au modèle/SKU et à la version de Windows.
|
||||
- Génération facultative d’un fichier de réponses Windows (Unattend), notamment pour configurer le nom d’hôte et un compte local.
|
||||
- Configuration UEFI, copie de `winre.wim`, enregistrement et activation de WinRE.
|
||||
- Progression du déploiement, journalisation et copie du journal à la racine de C: après une tentative d’installation.
|
||||
- Mode interactif ou déploiement automatisé en ligne de commande.
|
||||
|
||||
## Prérequis et fichiers
|
||||
|
||||
DeployCenter est conçu pour fonctionner dans WinPE avec Windows PowerShell 5.1 et les outils Windows nécessaires au déploiement : DISM, DiskPart, `mountvol`, `bcdboot`, `reagentc`, Robocopy et les cmdlets de gestion du stockage. Les images, les partages et les pilotes doivent être accessibles depuis WinPE.
|
||||
|
||||
Conservez la structure du dépôt lors de la copie dans l’environnement WinPE :
|
||||
|
||||
```text
|
||||
DeployCenter/
|
||||
├── DeployCenter.ps1
|
||||
├── DeployCenter.ini.example
|
||||
├── HardwareInfo.ps1
|
||||
├── Assets/
|
||||
├── Locales/
|
||||
├── Modules/
|
||||
├── Partitioning/Profiles/
|
||||
├── Themes/
|
||||
└── Unattend/
|
||||
├── Profiles/
|
||||
└── Templates/
|
||||
```
|
||||
|
||||
Les dossiers de modules, thèmes, profils, modèles XML, langues et ressources graphiques sont requis pour les fonctionnalités correspondantes. Le dossier `Drivers` est normalement placé au même niveau que le dossier `DeployCenter`.
|
||||
|
||||
## Installation et premier lancement
|
||||
|
||||
1. Copiez `DeployCenter.ini.example` sous le nom `DeployCenter.ini` dans le dossier DeployCenter.
|
||||
2. Modifiez les chemins de recherche des sources et les paramètres nécessaires. Le fichier INI est lu au démarrage et n’est jamais modifié par l’application.
|
||||
3. Démarrez WinPE, connectez les partages réseau nécessaires et lancez PowerShell dans le dossier DeployCenter.
|
||||
4. Exécutez :
|
||||
|
||||
```powershell
|
||||
powershell.exe -ExecutionPolicy Bypass -File .\DeployCenter.ps1
|
||||
```
|
||||
|
||||
Pour lancer en fenêtre redimensionnable :
|
||||
Pour ouvrir l’interface dans une fenêtre redimensionnable, notamment pour le diagnostic :
|
||||
|
||||
```powershell
|
||||
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`.
|
||||
UltraVNC est désactivé par défaut. L’option `-Vnc` le démarre au lancement ; dans ce cas, DeployCenter désactive le pare-feu WinPE afin de permettre la connexion VNC. Utilisez cette option uniquement sur un réseau de déploiement maîtrisé : la désactivation concerne le pare-feu WinPE dans son ensemble.
|
||||
|
||||
## Mise en page
|
||||
## Déploiement interactif
|
||||
|
||||
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.
|
||||
1. Vérifiez les informations matérielles et sélectionnez le **disque physique de destination**.
|
||||
2. Cliquez sur **Choisir…** pour ouvrir Sources Windows. Les chemins à analyser sont séparés par des points-virgules ; **Rechercher** actualise les résultats. La liste peut être filtrée, et un double-clic sur une image permet également de choisir une édition.
|
||||
3. Sélectionnez l’édition Windows voulue. DeployCenter recherche alors, si disponible, un pack de pilotes correspondant au matériel et à cette édition.
|
||||
4. Choisissez un profil de partitionnement. Le profil par défaut réserve EFI, MSR et WinRE avant C:, qui reçoit l’espace restant. Le profil C:/D: demande la taille de C: et attribue le reste à D:.
|
||||
5. Choisissez un profil de première ouverture. **Use OOBE** laisse Windows gérer l’expérience de première ouverture sans générer de fichier Unattend ni demander de nom d’hôte. Le profil **OEM installation** configure le nom d’hôte et un compte local à partir de `DeployCenter.ini`.
|
||||
6. Cliquez sur **Installer**, relisez les informations de confirmation et confirmez uniquement si le disque choisi peut être effacé.
|
||||
7. Suivez les étapes dans la fenêtre de progression. Après réussite, vérifiez le résultat et le rappel éventuel concernant la taille de WinRE avant de valider le redémarrage.
|
||||
|
||||
## Architecture et validation
|
||||
L’installation nécessite une image UEFI/GPT compatible et contenant `Windows\System32\Recovery\winre.wim`. Le moteur actuel ne propose pas de profil MBR/BIOS. Un manque de place empêchant la copie de `winre.wim` fait échouer le déploiement ; le non-respect des recommandations Microsoft de taille ou d’espace libre WinRE déclenche un avertissement. En présence de cet avertissement, le redémarrage automatique n’est pas présélectionné.
|
||||
|
||||
`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.
|
||||
## Sources Windows
|
||||
|
||||
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.
|
||||
Dans `DeployCenter.ini`, la section `[Sources]` accepte plusieurs racines séparées par des points-virgules. `%DEPLOY_VOLUME%` désigne le lecteur qui héberge DeployCenter :
|
||||
|
||||
```ini
|
||||
[UltraVNC]
|
||||
Password=MonMotDePasseDeTest
|
||||
[Sources]
|
||||
Paths=%DEPLOY_VOLUME%;Z:\
|
||||
```
|
||||
|
||||
Le mot de passe est stocké en clair dans `DeployCenter.ini` : utilisez cette option uniquement dans un environnement de test protégé.
|
||||
DeployCenter recherche les fichiers ISO, WIM et ESD ainsi que les dossiers de sources extraits. Pour les ISO, le fichier est monté en lecture seule pendant l’analyse et le déploiement, puis démonté lorsque l’opération se termine ou est annulée.
|
||||
|
||||
## Taille de la partition WinRE
|
||||
Par défaut, DISM travaille directement depuis les chemins source. En mode automatisé, le paramètre `-CopyLocally` permet de demander une copie Robocopy vers le disque Windows avant le traitement : `Sources` pour l’image, `Drivers` pour le pack de pilotes, ou les deux. Cela nécessite suffisamment d’espace libre sur la partition Windows. Le paramètre absent n’effectue pas ces copies. La copie de `winre.wim` vers la partition de récupération reste nécessaire dans tous les cas.
|
||||
|
||||
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.
|
||||
## Pilotes
|
||||
|
||||
## Paramètres Unattend facultatifs
|
||||
Par défaut, la racine des packs est `Drivers` au même niveau que `DeployCenter`. Elle peut être redéfinie par `[Drivers] RootPath` dans le fichier INI. Les chemins relatifs sont résolus depuis le dossier DeployCenter.
|
||||
|
||||
Sous `[Unattend]`, `SupportProvider` définit le nom de fournisseur de support et `SupportAppURL` l’URI de l’application ou du site de support dans `OEMInformation` du fichier de réponses. Ces clés sont facultatives ; chaque élément vide ou absent est omis indépendamment. `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 `InstallationOEM.xml` utilise `fr-FR` pour `InputLocale`.
|
||||
Organisez les packs de cette manière :
|
||||
|
||||
## Historique récent
|
||||
```text
|
||||
Drivers/
|
||||
└── Lenovo/
|
||||
└── <préfixe du modèle ou SKU>/
|
||||
└── Windows 11/
|
||||
├── ...
|
||||
└── pilote.inf
|
||||
```
|
||||
|
||||
- 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 `LocalAdmin` a é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.png` devient le fond du thème Windows par défaut pour les nouveaux utilisateurs des déploiements utilisant un profil Unattend. `[Unattend] WallpaperPath` accepte 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.example` documente désormais toutes les options reconnues par `Configuration.psm1`, y compris `SupportProvider` et `SupportAppURL` sous forme de clés explicites vides par défaut.
|
||||
- Le profil `InstallationOEM` utilise `fr-FR` pour `InputLocale`. Les clés facultatives `[Unattend] SupportProvider` et `SupportAppURL` ajoutent indépendamment le fournisseur et l’URI de support à `OEMInformation` ; chaque élément est omis lorsque sa clé est absente ou vide.
|
||||
- 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 `InstallationOEM` 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`.
|
||||
- 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ç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.
|
||||
Les constructeurs reconnus sont Lenovo, Dell, HP et Microsoft. Les dossiers de version reconnus incluent `Windows 10`, `Windows 11` et `Windows Server <année>`. Les fichiers INF peuvent se trouver dans des sous-dossiers ; DISM les ajoute récursivement à l’image Windows hors ligne. L’écran principal affiche le chemin recherché et indique si un pack correspondant a été trouvé.
|
||||
|
||||
## Configuration de DeployCenter.ini
|
||||
|
||||
### 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é.
|
||||
`DeployCenter.ini.example` décrit toutes les options et leurs valeurs par défaut. Les principales sections sont :
|
||||
|
||||
### 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.
|
||||
- `[General] Theme` : thème chargé depuis `Themes/<nom>.psd1` (Light par défaut).
|
||||
- `[Sources] Paths` : racines de recherche séparées par des points-virgules.
|
||||
- `[Partitioning] WinRESizeMB` : taille réservée à WinRE en Mo (1024 Mo par défaut).
|
||||
- `[Drivers] RootPath` : racine personnalisée des pilotes, vide pour utiliser le dossier `Drivers` voisin ; les clés URL sont des liens de référence constructeur.
|
||||
- `[Unattend]` : compte local, mot de passe encodé, informations d’assistance et fond d’écran.
|
||||
- `[UltraVNC] Password` : mot de passe de test facultatif ; vide, un mot de passe aléatoire est généré.
|
||||
|
||||
### 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`.
|
||||
Le mot de passe d’un compte local Unattend se prépare avec :
|
||||
|
||||
```powershell
|
||||
powershell.exe -ExecutionPolicy Bypass -File .\DeployCenter.ps1 -EncodeUnattendPassword
|
||||
```
|
||||
|
||||
### Alternance des lignes des tableaux
|
||||
Saisissez le mot de passe à l’invite masquée, puis placez la valeur produite dans `[Unattend] AdminPasswordBase64`. Cette valeur Base64 est réversible et ne constitue pas un chiffrement ; protégez `DeployCenter.ini` en conséquence. Ne confondez pas ce réglage avec `[UltraVNC] Password`, qui est une option de test distincte.
|
||||
|
||||
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.
|
||||
Les clés `SupportProvider`, `SupportURL` et `SupportAppURL` sont facultatives. `SupportURL` correspond à un site Web d’assistance ; `SupportAppURL` correspond au protocole d’une application d’assistance. `WallpaperPath` accepte un chemin `.png`, `.jpg` ou `.bmp`, absolu ou relatif au dossier DeployCenter ; vide, il laisse le fond Windows inchangé. Ces personnalisations sont appliquées avec un profil Unattend, pas avec **Use OOBE**.
|
||||
|
||||
## Déploiement automatisé
|
||||
|
||||
## Paramètre de démarrage VNC (v18)
|
||||
`-NonInteractive` lance le déploiement sans demander les choix de la première page. Tous les paramètres requis doivent être fournis et `-ConfirmDiskErase` est obligatoire. L’application affiche toujours la fenêtre de progression.
|
||||
|
||||
- Sans paramètre : UltraVNC ne démarre pas.
|
||||
- Avec `-vnc` : UltraVNC démarre.
|
||||
Exemple pour Windows 11 sur le disque 0, avec le profil C:/D: et le profil Unattend OEM :
|
||||
|
||||
Exemple : `powershell.exe -ExecutionPolicy Bypass -File .\DeployCenter.ps1 -vnc`
|
||||
```powershell
|
||||
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
|
||||
```
|
||||
|
||||
Paramètres requis :
|
||||
|
||||
## Options de lancement
|
||||
- `-DiskNumber` : numéro du disque physique à effacer.
|
||||
- `-ImagePath` : chemin d’un ISO, WIM, ESD ou d’un dossier de sources Windows.
|
||||
- `-EditionIndex` : index de l’édition dans l’image.
|
||||
- `-PartitionProfileId` : ID d’un fichier PSD1 dans `Partitioning/Profiles`.
|
||||
- `-UnattendProfileId` : ID d’un profil dans `Unattend/Profiles`, ou `OOBE` pour ne pas appliquer d’Unattend.
|
||||
- `-ConfirmDiskErase` : confirmation explicite de l’effacement du disque.
|
||||
|
||||
- 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.
|
||||
Paramètres conditionnels et facultatifs :
|
||||
|
||||
- `-HostName` : requis lorsqu’un profil Unattend configure le nom de machine ; le nom doit respecter la limite NetBIOS de 15 caractères.
|
||||
- `-CSizeGB` : requis par un profil qui demande la taille de C: ; le profil C:/D: attribue le reste à D:.
|
||||
- `-RestartWhenComplete` : demande le redémarrage après réussite ; les avertissements de capacité WinRE annulent cette demande.
|
||||
- `-CopyLocally Sources,Drivers` : copie l’image et les pilotes localement. Les valeurs possibles sont `Sources` et `Drivers`, individuellement ou ensemble. Sans ce paramètre, DISM utilise directement les chemins source.
|
||||
|
||||
## Module VNC
|
||||
`-CopyLocally` est un paramètre de déploiement : il s’utilise avec `-NonInteractive`. Pour laisser Windows gérer la première ouverture, utilisez `-UnattendProfileId OOBE` et omettez `-HostName`. Le processus retourne `0` en cas de réussite et `1` si la préparation ou le déploiement échoue. Après une tentative d’installation, le journal est également copié à la racine de `C:\`.
|
||||
|
||||
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.
|
||||
## Journaux et dépannage
|
||||
|
||||
- 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.
|
||||
Le bouton **Journal** ouvre le journal de session. Les fichiers sont créés dans `Logs` avec l’adresse IPv4 détectée et l’horodatage. Après une tentative de déploiement, une copie du journal est placée à la racine de `C:\` pour rester accessible même si le partage réseau n’est plus disponible.
|
||||
|
||||
En cas d’échec :
|
||||
|
||||
## Modules
|
||||
1. Relevez le message final et l’étape en échec dans la fenêtre de progression.
|
||||
2. Consultez le journal DeployCenter et, si nécessaire, les journaux système DISM/Windows Setup sur la machine cible.
|
||||
3. Vérifiez l’accès réseau aux sources, l’index d’édition, l’espace du disque cible et la présence des fichiers INF attendus.
|
||||
4. Après un échec de partitionnement, les lettres et partitions sont conservées autant que possible pour faciliter le diagnostic. Ne relancez pas l’installation avant d’avoir vérifié le disque sélectionné et son état.
|
||||
|
||||
- `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.
|
||||
Les messages de DeployCenter suivent la langue de WinPE. Les sorties DISM, DiskPart et des autres outils Windows restent dans la langue de ces outils.
|
||||
|
||||
## Profils de partitionnement
|
||||
## Modules et personnalisation
|
||||
|
||||
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.
|
||||
- `DeployCenter.ps1` : point d’entrée, initialisation et orchestration de l’interface.
|
||||
- `Modules/UI.psm1` : fenêtres, contrôles et workflows d’interface.
|
||||
- `Modules/Deployment.psm1` : partitionnement et application/configuration de Windows.
|
||||
- `Modules/WindowsSources.psm1` : détection des sources, montage ISO et lecture des éditions.
|
||||
- `Modules/Partitioning.psm1` et `Partitioning/Profiles/*.psd1` : lecture et validation des profils de partitionnement.
|
||||
- `Modules/DriverManagement.psm1` : recherche des packs selon le matériel et l’édition Windows.
|
||||
- `Modules/Unattend.psm1`, `Unattend/Profiles/*.psd1` et `Unattend/Templates/*.xml` : profils et génération du fichier de réponses.
|
||||
- `Modules/Configuration.psm1` : lecture de `DeployCenter.ini`.
|
||||
- `Modules/Logging.psm1` : journalisation et copie finale du journal.
|
||||
- `Modules/Localization.psm1` et `Locales/*.psd1` : langue de l’interface et des messages DeployCenter.
|
||||
- `Modules/ThemeManager.psm1` et `Themes/*.psd1` : palettes de l’interface.
|
||||
|
||||
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.
|
||||
Les profils PSD1 sont des données de configuration ; gardez leur structure et leurs identifiants cohérents. Les fichiers PowerShell et profils utilisés par Windows PowerShell 5.1 doivent rester encodés en UTF-8 avec BOM pour préserver correctement les caractères accentués.
|
||||
Reference in new issue
Block a user