mirror of
https://github.com/rbalsleyMSFT/FFU.git
synced 2026-06-14 02:09:35 -06:00
4.2 KiB
4.2 KiB
graph TD
subgraph "Start & Initialization"
A[Start] --> B{Load ConfigFile?};
B --> C[Process Parameters];
C --> D{Validate Parameters};
D --> E{"dirty.txt exists?"};
E -- Yes --> F[Run Cleanup Routine];
F --> G["Create new dirty.txt"];
E -- No --> G;
end
G --> H{"-InstallDrivers or -CopyDrivers?"};
subgraph "Pre-Build Preparations"
H -- Yes --> I{Driver Source?};
I -- "-DriversJsonPath" --> J[Download Drivers via JSON in Parallel];
I -- "-Make and -Model" --> K[Download Drivers for specific Make/Model];
I -- "Local Folder" --> L[Use Existing Drivers in Drivers Folder];
subgraph "ADK & WinPE"
M[Check for ADK & WinPE Add-on];
M --> N{Latest Version Installed?};
N -- No --> O[Uninstall Old & Install Latest ADK/WinPE];
N -- Yes --> P[Get ADK Path];
O --> P;
end
Q{"-InstallApps?"};
subgraph "Application & In-VM Content Preparation"
direction LR
R[Check for existing downloaded apps];
R --> S{Download missing WinGet apps};
S --> T{"-InstallOffice?"};
T -- Yes --> U[Download ODT & Office content];
T -- No --> V[Continue];
U --> V;
V --> W["Download in-VM updates: Defender, MSRT, etc."];
W --> X["Create Apps.iso"];
end
end
J --> M;
K --> M;
L --> M;
H -- No --> M;
P --> Q;
Q -- Yes --> R;
X --> Y;
Q -- No --> Y{"-AllowVHDXCaching?"};
subgraph "VHDX Management"
Y -- Yes --> Z[Check for matching cached VHDX];
Z --> AA{Cache Hit?};
AA -- Yes --> AB[Use Cached VHDX];
AA -- No --> AC[Create New VHDX];
Y -- No --> AC;
subgraph "VHDX Creation Workflow"
AC --> AD{ISOPath provided?};
AD -- No --> AE[Download Windows ESD media];
AD -- Yes --> AF[Use provided ISO];
AE --> AG[Create & Partition VHDX];
AF --> AG;
AG --> AH[Apply Base Windows Image to VHDX];
AH --> AI{"Updates specified? (CU, dotNET, etc.)"};
AI -- Yes --> AJ[Apply Updates to Offline VHDX];
AJ --> AK[Run Component Cleanup];
AI -- No --> AK;
AK --> AL{"Optional Features specified?"};
AL -- Yes --> AM[Enable Optional Features];
AL -- No --> AN[Finalize VHDX Setup];
AM --> AN;
AN --> AO{"-AllowVHDXCaching?"};
AO -- Yes --> AP[Optimize and Copy VHDX to Cache];
AO -- No --> AQ[Continue];
AP --> AQ;
end
end
AB --> BA;
AQ --> BA{"-InstallApps?"};
subgraph "FFU Creation"
subgraph "VM-Based Capture (-InstallApps)"
direction LR
BB[Create Hyper-V VM from VHDX];
BB --> BC["Create WinPE Capture Media iso"];
BC --> BD[Configure network share for capture];
BD --> BE["Start VM: Boots to Audit Mode"];
BE --> BF[Orchestrator runs: Installs apps, syspreps, shuts down];
BF --> BG[VM reboots from Capture Media];
BG --> BH["CaptureFFU.ps1 runs, saves FFU to share, shuts down"];
end
subgraph "Direct VHDX Capture"
BI[Capture FFU directly from VHDX using DISM];
end
end
BA -- Yes --> BB;
BA -- No --> BI;
subgraph "Post-Processing & Media Creation"
BK{"-InstallDrivers?"};
BK -- Yes --> BL[Mount FFU & Inject Drivers];
BK -- No --> BM[Continue];
BL --> BM;
BM --> BN{"-Optimize?"};
BN -- Yes --> BO[Optimize FFU using DISM];
BN -- No --> BP[Continue];
BO --> BP;
BP --> BQ{"-BuildUSBDrive?"};
BQ -- Yes --> BR[Create WinPE Deployment Media];
BR --> BS["Partition USB Drive(s)"];
BS --> BT[Copy FFU, Deploy scripts & other assets to USB];
BQ -- No --> BU[Continue];
BT --> BU;
end
BH --> BK;
BI --> BK;
subgraph "Final Cleanup"
BU --> BV[Cleanup VM, VHDX, temp files];
BV --> BW["Remove dirty.txt"];
BW --> BX[End];
end