PowerShell Modules
All FrenchExDev PowerShell work is under intensive development. It provides shell-level automation for the tools and machines I use, alongside the C# libraries, wrappers and bundles. Diem is the product effort intended to bring these pieces toward a configurable software factory Lab.
Reading the Module Inventory
The 9 September 2026 source inventory contains 36 module manifests, plus standalone scripts and other directories. A manifest, a file under src/Public, and a command actually exported after import are different observations.
The commands below are declared in inspected source. Modules were not imported for this review, and their operations were not executed. Usage excerpts assume that the corresponding module and its dependencies are already loaded.
Most module directories follow PoSh/FrenchExDev/FrenchExDev.<name>.PoSh. This existing PowerShell implementation evolves alongside the C# stack; it does not uniformly wrap the newer .NET APIs. PowerShell source tree (ouvre dans une nouvelle fenêtre).
Developer Shell
The daily workflow is to configure a shell, read project settings and manage a workspace.
| Module | Current entry points and purpose |
|---|---|
| DevPoSh | Get-DevPoSh, New-DevPoSh, profile and PowerShell installation helpers |
| DevSetup | Invoke-DevSetup, .NET/software/package/Vagrant-plugin installation helpers |
| System | File, directory, text, administrator and capture-group utilities |
| Env | Get-EnvFile, Import-Env, Update-EnvFile, Write-EnvFile |
| VsCode | Create, read and save workspace configurations |
For example, the Env function accepts an explicit settings file:
Get-EnvFile -EnvFile ./.env.exampleGet-EnvFile -EnvFile ./.env.exampleIt reads key/value lines using helpers from System. The DevBash directory in the broader tree is not counted as an implemented command set here. Env source (ouvre dans une nouvelle fenêtre) · Shell source (ouvre dans une nouvelle fenêtre).
Source Control & CI
Git supplies Get-GitStatus, Get-GitStatuses and New-Git; GitHub supplies New-GitHubRepo. The GitLab.DockerCompose module contains separate constructors for GitLab and GitLab Runner services, generators and Compose configurations.
A repository-status example uses the current parameter:
Get-GitStatuses -Dir ./repositoriesGet-GitStatuses -Dir ./repositoriesThe GitLab and runner constructors are existing composition work relevant to the future software factory. The C# GitLab configuration components and CLI wrappers are separate integrations being developed toward the same product direction. Git functions (ouvre dans une nouvelle fenêtre) · GitLab and runner constructors (ouvre dans une nouvelle fenêtre).
Container & Orchestration
| Module | Current scope |
|---|---|
| Docker | Create, remove and switch Docker contexts |
| DockerCompose | Build configuration objects, write files and invoke Compose operations |
| Traefik.DockerCompose | Construct proxy services, labels, routing and Compose configuration |
| Traefik | Construct TLS configuration |
| Kubernetes | Manifest and loader scaffold; no public function files in the inspected directory |
For an existing Docker context named lab, the source supports Get-DockerContext -Action SwitchTo -Name lab. Despite its Get- name, this dispatcher performs the selected action; this example switches context.
The Compose and Traefik functions work with their external tools and project settings. Compose source (ouvre dans une nouvelle fenêtre) · Traefik source (ouvre dans une nouvelle fenêtre) · C# configuration APIs.
VM & Image Building
| Module | Current scope |
|---|---|
| Packer | Template/configuration constructors, writing and Build-Packer |
| Packer.Alpine | Answer files, configuration objects and Alpine image composition |
| Packer.Alpine.Docker | Docker image configuration and composition |
| Packer.Alpine.Kubernetes | Kubernetes image configuration and composition |
| Packer.Debian | Manifest and loader scaffold; no public function files found |
| Vagrant | Vagrant dispatch, box lookup and insecure public-key helper |
| Vagrant.Catalog | Catalog, version and provider metadata constructors |
| VirtualBox | Version, Guest Additions and VM cleanup helpers |
Get-VirtualBoxVersion currently runs VBoxManage from the standard Windows installation directory. It is a concrete example of a host-specific assumption in this automation.
The Packer.Alpine.Kubernetes manifest declares three exports but only two public function files were found; its export list needs alignment before publishing a command count. Packer source (ouvre dans une nouvelle fenêtre) · Kubernetes image source (ouvre dans une nouvelle fenêtre) · C# image and VM stack.
Virtual Operating Systems (Vos)
The PowerShell Vos module has configuration constructors, file writers and machine/group dispatch functions. Vos.Alpine and Vos.Alpine.Docker add specialized machine construction. Vos.Alpine.Kubernetes includes machine/IP configuration and jumpbox setup functions.
For example, Get-VosConfig -Action Edit -Global -Local opens the configured global and local files in VS Code. This is an editing action in the existing shell implementation.
The newer C# Vos.Infra.PowerShell project supplies a separate cmdlet integration with the .NET service layer. Its existence does not mean every PowerShell Vos function already delegates to that layer. PowerShell Vos source (ouvre dans une nouvelle fenêtre) · C# Vos services.
Infrastructure Services
| Module | Current scope |
|---|---|
| EtcHosts | Read/write the hosts file and add/remove entries |
| SshConfig | SSH config, known-hosts editing, keys and session helpers |
| MkCert | Certificate command/generator helpers |
| Net | MAC address generation and validation |
| PiHole / PiHole.DockerCompose | DNS helpers and service composition |
| Keycloak.DockerCompose | Keycloak service and Compose constructors |
| Sonatype.Nexus.DockerCompose | Repository service and Compose generators |
| LocalHost.HomeLab | A New-LocalHostHomeLab public file; manifest exports are empty |
| Keycloak | Manifest and loader scaffold; no public function files found |
To read the hosts file using its platform-dependent path:
Get-EtcHostsFile -Action GetContentGet-EtcHostsFile -Action GetContentSshConfig declares seven exports for eight public files. LocalHost.HomeLab and that mismatch are further reasons to describe functions by source instead of advertising one aggregate cmdlet count. Service sources (ouvre dans une nouvelle fenêtre) · LocalHost.HomeLab (ouvre dans une nouvelle fenêtre).
.NET & Build
Dotnet provides project/solution operations, version bumping, source/test project discovery, cleaning and package publication helpers. Its action dispatcher can build the solution in the current working directory:
Get-DotnetSolution -Action Build -Configuration ReleaseGet-DotnetSolution -Action Build -Configuration ReleaseThis invokes dotnet build --configuration Release. It is separate from the generated C# Dotnet wrapper. The Alpine directory previously listed here has no verified public command set in this inventory; C# release discovery is documented under Alpine.Version. Dotnet PowerShell source (ouvre dans une nouvelle fenêtre).
AI & Productivity
Claude contains src/Restart-ClaudeVm.ps1, a standalone script accepting -Action Restart or -Action Reset. It defines Restart-ClaudeVm and Reset-ClaudeVm and invokes the selected branch. The code targets local Claude processes, VM state and a Windows service.
MyInfra contains infrastructure composition scripts. MyRoot.VsCode contains Initialize-Me.ps1 for workspace setup. These are machine-oriented scripts, not evidence of packaged module exports.
The intended next level of composition is MyLocalHost.Diem.Lab: a project expressing my own laptop Lab through the reusable stack. That product integration, including GitLab, GitLab CI and nodes, remains in development. Claude script (ouvre dans une nouvelle fenêtre) · Diem Lab trajectory.