Framework PowerShell permettant de construire et personnaliser des images Windows à partir de médias sources compatibles.
PimsOS Builder est un framework PowerShell permettant de construire et de personnaliser des images Windows à partir de médias sources compatibles.
Le projet automatise progressivement les différentes étapes du processus de Build tout en séparant :
- les définitions de personnalisation ;
- les profils ;
- la configuration générée ;
- l'exécution des Actions ;
- les opérations techniques Windows.
PimsOS repose sur une architecture modulaire interne organisée autour d'un module PowerShell unique.
Le projet ne constitue pas une collection de modules PowerShell indépendants. Les composants internes sont chargés par Modules\PimsOS.psm1.
Les opérations de modification sont réalisées dans un Workspace de travail afin de préserver les ressources sources lorsqu'une copie de travail est nécessaire.
La personnalisation d'une image Windows implique de nombreuses opérations techniques qui sont difficiles à reproduire manuellement et à maintenir dans le temps.
PimsOS Builder cherche à automatiser ce processus en séparant clairement :
- les définitions des Tweaks ;
- les profils utilisateur ;
- la configuration finale ;
- le moteur d'exécution ;
- les opérations techniques.
Cette séparation permet de construire un framework :
- reproductible ;
- documenté ;
- testable ;
- maintenable ;
- extensible.
- Construire automatiquement des images Windows personnalisées.
- Supporter différentes versions compatibles de Windows.
- Décrire les personnalisations avec des données JSON.
- Séparer les définitions, les profils et la configuration d'exécution.
- Fournir une architecture modulaire au sein d'un module PowerShell unique.
- Permettre l'ajout de nouveaux types d'Actions sans modifier inutilement le moteur principal.
- Fournir une couverture de tests Pester adaptée aux composants critiques.
- Produire à terme des rapports et des artefacts de Build complets.
Version technique : 3.0.0
Statut : 🚧 Développement actif / architecture stabilisée
| Domaine | État |
|---|---|
| Architecture | ✅ Stabilisée |
| Module PimsOS unique | ✅ Implémenté |
| BuildContext | ✅ Implémenté |
| BuildState | ✅ Implémenté |
| Workflow | ✅ Implémenté |
| Pipeline | ✅ Implémenté |
| Configuration | ✅ Implémentée |
| ActionRegistry | ✅ Implémenté |
| ActionEngine | ✅ Implémenté |
| Engines spécialisés | ✅ Implémentés |
| Managers | ✅ Implémentés |
| Registry | ✅ Implémenté |
| Image ISO / WIM | ✅ Implémentée |
| Tests Pester | ✅ Forte couverture / extension en cours |
| Reporting | 🟡 À enrichir |
| Génération ISO finale | 🟡 En cours de finalisation |
| Providers Chocolatey / Winget | 🟡 À finaliser |
| Converters | ⬜ À implémenter |
La version technique 3.0.0 ne constitue pas encore une release finale stable du produit.
Les principales étapes du Build sont actuellement implémentées :
- ✔ Recovery
- ✔ Vérification de l'environnement
- ✔ Préparation du Workspace
- ✔ Gestion de l'ISO
- ✔ Détection du WIM
- ✔ Copie du WIM
- ✔ Lecture des éditions Windows
- ✔ Sélection de l'édition
- ✔ Montage du WIM
- ✔ Gestion des ruches du registre
- ✔ Chargement des Tweaks
- ✔ Chargement des profils
- ✔ Validation de la configuration
- ✔ Fusion Profil + Tweaks
- ✔ Exécution des Actions
- ✔ Commit des modifications
- ✔ Démontage des ressources
- ✔ Nettoyage
- ✔ Finalisation du Build
La validation complète d'un scénario de Build de bout en bout et la génération finale de l'ISO restent en cours de finalisation.
Le Builder distingue clairement trois niveaux :
Tweaks JSON
│
▼
Profils
│
▼
Configuration finale
│
▼
Actions
│
▼
Engines
Les définitions des Tweaks restent séparées de leur utilisation.
Les profils déterminent les personnalisations sélectionnées.
Le moteur de configuration construit ensuite une configuration destinée à l'exécution.
Les définitions sources des Tweaks ne sont pas modifiées lors de cette opération.
Le traitement d'une Action suit le flux :
Action
│
▼
ActionEngine
│
▼
ActionRegistry
│
▼
Engine spécialisé
│
▼
Manager
│
▼
Module technique
│
▼
Windows
Les Engines actuellement intégrés comprennent :
RegistryEngineServiceEnginePackageEngineDriverEngineFeatureEngineCapabilityEngineCommandEngineFileEngineFolderEngineEnvironmentEngineScheduledTaskEngineShortcutEngine
Les Managers actuellement intégrés comprennent :
PackageManagerDriverManagerFeatureManagerCapabilityManagerCommandManagerFileManagerFolderManagerEnvironmentManagerScheduledTaskManagerShortcutManager
Les Managers encapsulent les opérations techniques et les mécanismes de providers de leur domaine.
Le BuildContext est le contrat central du Build.
Il est créé au démarrage puis enrichi progressivement pendant tout le cycle du Build.
Il centralise notamment :
- les informations du projet ;
- les paramètres du Build ;
- la version de Windows ciblée ;
- les chemins de travail ;
- le BuildState ;
- la configuration ;
- les ressources ;
- les résultats ;
- les statistiques ;
- les rapports.
Le même contexte est transmis aux composants concernés.
Les variables globales ne sont pas utilisées pour transporter l'état du Build.
Le BuildState représente l'état courant de l'exécution.
Il permet notamment de suivre :
- l'initialisation ;
- le Recovery ;
- les vérifications de l'environnement ;
- la progression du Pipeline ;
- l'état des ressources ;
- le chargement de la configuration ;
- l'application des personnalisations ;
- l'état final du Build.
Le BuildState est contenu dans le BuildContext.
PimsOS Builder n'est pas conçu autour d'une seule version de Windows.
Les informations relatives à la cible doivent être découvertes depuis l'image traitée et/ou provenir du BuildContext et de la configuration.
L'environnement de référence actuel du projet est :
Windows 11 25H2
Build 26100
Les métadonnées générales du projet sont centralisées dans :
version.json
Exemple :
{
"Project": "PimsOS Builder",
"Version": "3.0.0",
"Windows": {
"Release": "11 25H2",
"Build": "26100"
},
"Author": "Pims",
"Company": "PimsOS",
"Repository": "https://github.com/Pims/PimsOS",
"BuildDate": null
}L'objectif est de pouvoir étendre le traitement à d'autres versions compatibles sans modifier l'architecture générale du moteur.
PimsOS Builder repose sur un module PowerShell unique :
Modules\PimsOS.psd1
Modules\PimsOS.psm1
Les composants internes sont organisés par responsabilité :
Modules
│
├── Actions
├── Configuration
├── Core
├── Image
├── Infrastructure
├── Managers
├── Package
├── Windows
├── PimsOS.psd1
└── PimsOS.psm1
Le flux logique principal est :
Workflow
│
▼
Pipeline
│
▼
ActionEngine
│
▼
ActionRegistry
│
▼
Engine spécialisé
│
▼
Manager
│
▼
Module technique
│
▼
Windows
Les composants internes ne sont pas des modules PowerShell indépendants.
L'API publique du module est volontairement minimale.
L'entrée fonctionnelle actuelle est :
Initialize-PimsOSExemple :
Import-Module .\Modules\PimsOS.psd1
$Context = Initialize-PimsOSLes Engines, Managers et autres composants internes restent internes au module sauf export explicite.
PimsOS
│
├── Build
├── Config
├── Documentation
├── ISO
├── Logs
├── Modules
│ ├── Actions
│ ├── Configuration
│ ├── Core
│ ├── Image
│ ├── Infrastructure
│ ├── Managers
│ ├── Package
│ ├── Windows
│ ├── PimsOS.psd1
│ └── PimsOS.psm1
├── Output
├── Tests
├── Workspace
└── version.json
La description détaillée est disponible dans :
Documentation/ProjectStructure.md
- PowerShell 7.6.x
- DISM
- Windows ADK pour les opérations de génération d'images qui le nécessitent
- JSON
- Pester 5.x
- Git
- Visual Studio Code recommandé
Les providers de packages prévus comprennent :
- Chocolatey
- Winget
Cloner le dépôt :
git clone https://github.com/pimsous/PimsOS.git
cd PimsOSPour préparer l'environnement de développement :
Get-Content .\Documentation\GettingStarted.mdConsulter également :
Documentation\Prerequisites.md
Charger le module :
Import-Module .\Modules\PimsOS.psd1Vérifier le point d'entrée :
Get-Command Initialize-PimsOSLancer le Builder :
.\Build\Build-PimsOS.ps1Pour travailler directement avec l'API publique :
$Context = Initialize-PimsOSBuild-PimsOS.ps1 constitue le script de lancement du processus de Build ; Initialize-PimsOS constitue le point d'entrée public du module.
Les tests utilisent Pester 5.x.
Exécuter tous les tests :
Invoke-Pester -Path .\Tests\Unit
Invoke-Pester -Path .\Tests\IntegrationExécuter une suite ciblée :
Invoke-Pester -Path .\Tests\UnitLes nouveaux composants doivent être accompagnés de tests adaptés.
Les tests Legacy sont conservés séparément et ne constituent pas la validation courante du Builder.
La documentation technique est disponible dans :
Documentation/
Elle comprend notamment :
Architecture.mdArchitectureRules.mdAPI.mdBuildContext.mdCodingStandards.mdDeveloperGuide.mdGettingStarted.mdLifecycle.mdModuleGuide.mdPrerequisites.mdProjectStatus.mdProjectStructure.mdSchema.mdTesting.mdTechnicalDecisions.mdRoadmap.mdMilestones.mdReleaseNotes.mdChatGPT-Workflow.mdLegacy.md
Les décisions architecturales sont documentées dans :
Documentation/ADR/
Avant toute contribution, consulter :
Documentation/GettingStarted.mdDocumentation/DeveloperGuide.mdDocumentation/CodingStandards.mdDocumentation/Architecture.mdDocumentation/ArchitectureRules.mdDocumentation/Testing.mdDocumentation/ADR/
Chaque contribution doit :
- respecter l'architecture ;
- conserver un BuildContext unique ;
- utiliser le BuildState ;
- respecter le routage des Actions ;
- être accompagnée de tests ;
- mettre à jour la documentation lorsque nécessaire.
Les contributions sont détaillées dans :
CONTRIBUTING.md
- Finaliser la couverture des composants critiques.
- Renforcer les tests Recovery et Security.
- Finaliser les providers nécessaires.
- Enrichir le Reporting.
- Valider un scénario de Build complet de bout en bout.
- Finaliser la génération de l'ISO.
- automatisation complète de la génération d'image ;
- reporting complet ;
- extension du support Windows compatible ;
- préparation d'une release publique stable.
Consulter :
Documentation/Roadmap.md
Documentation/Milestones.md
Documentation/Backlog.md
PimsOS Builder repose sur les principes suivants :
- simplicité ;
- modularité ;
- reproductibilité ;
- automatisation ;
- testabilité ;
- maintenabilité ;
- extensibilité.
Le projet ne cherche pas uniquement à produire une image Windows personnalisée.
Il vise également à fournir un framework PowerShell robuste, documenté, testable et progressivement industrialisable.
PimsOS Builder est distribué sous licence GNU General Public License v3.0 (GPL-3.0).
Vous êtes libre d'utiliser, d'étudier, de modifier et de redistribuer ce projet dans le respect des conditions de cette licence.
Consultez le fichier LICENSE pour le texte complet de la licence.
Pour comprendre le fonctionnement du projet :
- consulter
Documentation/GettingStarted.md; - consulter
Documentation/Architecture.md; - consulter
Documentation/DeveloperGuide.md; - consulter
Documentation/Testing.md; - consulter
Documentation/ADR/.
Pour le suivi de l'état du projet :
Documentation/ProjectStatus.md