Open Source MIT License v1.0.0 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, 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.

ExcludedApps // Build-time tokens

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