Skip to content

Architecture

PSWinDeploy is split into three independent layers so that each one can run on the most suitable host.

Overview

PSWinDeploy/
├── PSWinDeploy.psd1                Global configuration
├── Modules/
│   ├── Config/                     Central config loader
│   ├── WinPE-Builder/              WinPE build (amd64/arm64)   — Step 1
│   ├── WIM-Manager/                WIM image management        — Step 2
│   ├── TaskSequence/                JSON sequence engine        — Step 3
│   ├── DiskSelector/                 Console disk assistant (WinPE) — Step 3
│   ├── ProfileManager/             Profiles, autologon, security — Step 4
│   └── Notify/                     SMTP + Teams notifications
├── API/
│   └── Deploy-API.ps1              Pode REST server (Windows)
├── Web/                            React + Vite front-end (Docker) — Step 5
│   └── Dockerfile
├── Profiles/                       Deployment profiles (*.json)
├── Catalogue/
│   └── catalogue.json              Available apps and scripts
├── Sequences/
│   └── *.json                      Deployment sequences
├── Scripts/
│   ├── Start-Deploy.ps1            WinPE entry point
│   └── startnet.cmd
└── docker-compose.yml

The three layers

1. Web Interface (Docker / Linux, port 3000)

A React + Vite single-page app. It talks to the REST API over HTTP/JSON only — it never touches Windows shares, WIM files, or PowerShell directly. This is what lets it run in a Linux container while the rest of the toolchain lives on Windows.

Pages: profile selection, catalogue, running deployment (live logs), deployment history/logs, sequence editor, settings.

2. REST API (Windows, port 8080)

Deploy-API.ps1, built on the Pode PowerShell web framework. It exposes the deployment engine (profiles, catalogue, WIM images, sequences) as JSON endpoints and resolves a runtime sequence from a profile + selected apps.

3. Deployment engine (Windows / WinPE)

The actual PowerShell modules that do the work: build the WinPE image, apply the WIM, execute the JSON task sequence (disk partitioning, domain join, updates, software install, custom scripts), manage reboots, and send notifications.

Deployment flow

  1. Operator selects a profile in the web UI, picks optional apps from the catalogue, launches preparation.
  2. POST /api/deploy/prepare resolves the runtime sequence from profile + selected apps.
  3. Target machine boots WinPE (ISO/PXE) → Start-Deploy.ps1.
  4. WinPE stage: FormatDisk + ApplyWIM + autologon setup.
  5. Reboot → first Windows boot (temporary deploy-temp account).
  6. Sequence steps run: JoinDomainUpdatesSoftware → custom Scripts.
  7. Intermediate reboots are resumed automatically via RunOnce.
  8. Completion: Set-LocalAdminPassword + Invoke-DeployCleanup, notification sent.

WinPE architecture support

Since Windows ADK 2004 (build 19041), x86 support has been removed. Only amd64 (x64) and arm64 are supported architectures.