Quick start.
Clone, fetch the toolchain, build. Three commands take you from empty directory to .intunewin packages ready for Intune. Four products, every Microsoft-supported language, no per-organization edits required.
A production-ready toolkit for deploying Microsoft 365 Apps for Enterprise, Visio, Project, and language packs through Microsoft Intune.
Three commands/No XML editing/Four products
Clone, fetch the toolchain, build. Three commands take you from empty directory to .intunewin packages ready for Intune. Four products, every Microsoft-supported language, no per-organization edits required.
# Start from an ODT sample or generate at config.office.com # Wrap as Win32 yourself, write detection per language # OCT exposes every option, easy to break compatibility # Repeat the wrap-and-detect dance for each product <Setup Name="Company" Value="Your Company"/> # Will this placeholder survive review? # Channel still logged as raw CDN URL: # officecdn.microsoft.com/pr/55336b82-...
# One command to build them all PS> .\Build\Build-IntuneWinPackages.ps1 [+] Tokens resolved: CompanyName, ExcludedApps [+] Channel: MonthlyEnterprise [+] ExcludedApps: 7 (default set) [+] Detection scripts: 113 generated [+] Products packaged: 4 [+] Tests: 111/111 passing [+] Output: Build\Output\
Build\Staging\ is exactly what unpacks on the client. Copy it onto a test VM and run install, uninstall, or detection scripts directly. No .intunewin rebuild, no Intune upload, no ESP wait. Fix a bug and rerun in seconds.
Update-Tooling.ps1 grabs the latest setup.exe and IntuneWinAppUtil.exe, and verifies each is Microsoft-signed via Authenticode. Manifest tracks source URLs and timestamps.
Every Microsoft-supported Office language has an auto-generated detection script. One .intunewin package, deployed per language with a parameter. AST-aware build keeps the detection logic single-sourced.
Set CompanyName, exclude apps you don't ship (Access, Bing, Teams, OneDrive, whatever you want), pick a channel. All from CLI flags or one build-config.json. No source XML edits.
Every product ships with matching install, uninstall, and detection. Add a language to a user group, retire a product, scale to a new region. Reversible through Intune assignments alone, no rebuilds.
Every install, uninstall, and detection writes CMTrace-formatted lines to one folder: C:\ProgramData\M365AppsDeploy\Logs\. Open in CMTrace or OneTrace from your SCCM/MDT toolset — no log-format hunting.
What happens between your source XMLs and a device with Office on it. Each on-disk stage lives in the repo, ready to inspect.
m365apps-deploy is built for organizations that want a single, tested, repeatable build pipeline rather than copy-pasting templates.
| Capability | ODT example XML | Office Customization Tool | m365apps-deploy |
|---|---|---|---|
| Multi-product build | ×Manual per product | ×Generates XML only | ✓Four products, one build |
| Per-language detection | ×Hand-written | ×Not provided | ✓113 auto-generated |
| Org customization | ×Edit XMLs in place | ×Re-export each time | ✓CLI flags + config file |
| Channel logging | ×Raw CDN URLs | ×No logging layer | ✓CMTrace-ready, friendly channel names |
| Add/remove lifecycle | ×Install only, by hand | ×Configuration only | ✓Symmetric install + uninstall |
| Browsable artifacts | ×XML only, no scripts | ×Download XML each time | ✓Committed for GitHub |
| Toolchain refresh | ×Manual + unverified | ×Manual + unverified | ✓One command, signature-verified |
| Build verification | ×Trial-and-error in Intune | ×Trial-and-error in Intune | ✓111 tests on every tag |
Every product follows the same pattern: install, uninstall, and detection scripts driven by ODT, packaged as a Win32 app, with per-product configuration XMLs.