Open Source MIT License v1.0.8 Technical Poster

m365apps-deploy

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

PowerShell 5.1+ Intune Ready ODT-based Win32 app Multi-language
3
Commands to Build
4
Products Packaged
113
Language Packs

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.

WORKS OUT OF THE BOX
1$ git clone https://github.com/haakonwibe/m365apps-deploy.git
2$ .\Source\Update-Tooling.ps1
3$ .\Build\Build-IntuneWinPackages.ps1
 # 4 packages + 113 detection scripts
// 01

Built differently.

× ODT examples or OCT
# 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-...
  • Start from a Microsoft sample or OCT export, then go solo
  • Detection scripts by hand, one per language
  • OCT's option sprawl invites incompatible combos
  • Cryptic channel GUIDs in every log line
m365apps-deploy
# 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\
  • Customize via CLI flags or one config file, no XML edits
  • 113 per-language detection scripts auto-generated
  • Symmetric install and uninstall for every product
  • 111 Pester tests run before every tagged release
// 02

Why this toolkit.

Iterate without uploads

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.

Build\Staging\ // Mirror of the client

Refresh the toolchain

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.

Authenticode verified // Manifest tracked

113 Language Packs

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.

af-za through zu-za // Full coverage

Customize at build time

Set CompanyName, pick the base Language, exclude apps you don't ship (Access, Bing, Teams, OneDrive, whatever you want). All from CLI flags or one build-config.json. No source XML edits.

CompanyName // Language // ExcludedApps

Add or Remove, Anytime

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.

Symmetric pipelines // No rebuilds

CMTrace-ready logs

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.

ConfigMgr/Intune-friendly // One log root
// 03

How it works.

What happens between your source XMLs and a device with Office on it. Each on-disk stage lives in the repo, ready to inspect.

01
Source XMLs
Configurations
+ tokens
02
Build engine
Token
substitution
03
Staging
Mirror of
client layout
04
IntuneWinAppUtil
.intunewin
packaging
05
Output
Upload-ready
artifacts
06
Intune
Deployed
devices
// 04

vs. the alternatives.

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
// 05

Four products. One build.

Every product follows the same pattern: install, uninstall, and detection scripts driven by ODT, packaged as a Win32 app, with per-product configuration XMLs.

Microsoft 365 Apps
Word · Excel · PowerPoint
Visio
Add-on // matches Office
Project
Add-on // matches Office
Language Packs
Per-language deployment
113 LANGUAGES