estepz blog

Entra Profile Migration

Move someone's Windows profile from a local account to their Microsoft Entra ID account without rebuilding the PC. They sign in with their work account and find the same desktop, files, apps and settings.

First published 14 November 2026. Updated with every release.

0.1.1released 14 November 2026

Fixes a bug in 0.1.0 that stopped most real migrations before any change was made. Lab-verified as SYSTEM in a Windows 11 VM.

SHA-256
EB3A811A74F6E46930A667AD4C042F5925391AA264E6D9EF6E3B2C90C4F86B2D
Signed by
Entra Profile Migration Code Signing, thumbprint 7B2DEA26BD44FEDB907E92DBD7790E59D297AC55
This version
EntraProfileMigration-0.1.1.msi, kept at a fixed address

What it does

Windows ties a profile to the account that created it. When a PC moves from a local account to Entra ID, the usual answer is a fresh profile and an afternoon of copying files and re-creating settings. This tool re-points the existing profile at the user's Entra account instead. Nothing is copied: the profile folder stays where it is.

What carries over and what doesn't

ItemResult
Desktop, documents, filesKept in place
User settings (HKCU), Start menu, Store appsKept, checked in the lab
Saved browser passwords and cookies, Windows Credential Manager, certificate keysKept only with the optional old-password helper. The user types their old local password once at first sign-in.
Default-app choices (browser, PDF)Reset. Windows protects these on purpose. Re-pick them, or set them with Intune.
Joining the PC to Entra IDDone by you in Settings, part-way through the run. The tool waits for it.

What it supports

Local accounts on Windows 10 or 11 Pro, Enterprise or Education, run as an administrator or as SYSTEM (for example from an RMM tool). It refuses to run, before changing anything, on:

This is a release candidate. It has been tested end to end on Windows 11 in a lab virtual machine. Windows 10 and a real RMM rollout have not been tested yet.

Install

The installer and its scripts are signed with my own code-signing certificate, not one from a public authority, so each PC needs to trust that certificate once. In an elevated PowerShell window, in the folder you downloaded to:

Import-Certificate .\EPM-CodeSigning.cer -CertStoreLocation Cert:\LocalMachine\Root
Import-Certificate .\EPM-CodeSigning.cer -CertStoreLocation Cert:\LocalMachine\TrustedPublisher
(Get-FileHash .\EntraProfileMigration.msi -Algorithm SHA256).Hash   # compare with the SHA-256 above
msiexec /i .\EntraProfileMigration.msi /qn

Check that the certificate's thumbprint matches the one above before you trust it. To roll it out to many PCs, the package includes deployment\Trust\Install-EPMSigningTrust.ps1 for Intune, Group Policy or an RMM tool.

Run a migration

The installer puts epm.cmd in C:\Program Files\EntraProfileMigration, plus a Start menu shortcut for the step-by-step window. You need the user's Entra Object ID (Entra admin center, Users, the user, Overview).

epm /Preflight /SourceAccount .\john /TargetObjectId <object-id>
epm /Migrate /SourceAccount .\john /TargetUpn john@contoso.com /TargetObjectId <object-id> /OfferSecretRecovery
    (join the PC to Entra ID in Settings with john's account, sign out)
epm /Resume
    (restart; john signs in with his work account)
epm /Validate

Every command ends with a RESULT: line and an exit code that says what to do next: 0 done, 10 blocked (nothing changed), 20 restart, 21 waiting for the Entra join, 22 waiting for the user's sign-in, 30 rolled back. To undo, run epm /Rollback while the user is signed out.

Change notes

Every release is listed in the change notes, newest first. The download button above always points to the latest version.