Microsoft Is Retiring SMS and Voice MFA in Entra ID: Your Migration Playbook (and How to Buy More Time)

On July 13, 2026, Microsoft announced one of the biggest changes to authentication in Microsoft Entra ID in years: Microsoft-provided SMS and voice call authentication is being retired, and passkeys become the default authentication experience for everyone. If you still have users approving MFA with a text message or a phone call, this change lands in your tenant automatically – starting September 1, 2026, and finishing with a hard cutoff on February 1, 2027.

I have spent the last two weeks walking customers through what this actually means for them, and the same questions come up every time: What exactly happens to my tenant, and when? How do I find out who is affected? How do I get my users onto passkeys without melting the help desk? And – the question behind the question – what if I am not ready? Can I buy more time, and can I stop Microsoft from prompting my users to register new methods while I work out my plan?

This post is the playbook I wish I could just hand to every IT admin right now. We will cover:

  • The full retirement timeline and what changes automatically in your tenant
  • How to find every user who still relies on SMS or voice
  • How to move them to passkeys (or the Authenticator app) in a controlled way
  • How to extend the period if you need more time – the temporary opt-out and the customer-managed telecom provider option
  • How to suppress the registration prompts so your users are not nudged before you are ready
  • Lessons learned from real migrations, so you can skip the mistakes I have already made for you

Everything below is based on Microsoft’s official announcement and documentation as of late July 2026, plus hands-on testing in my own tenant. Where Microsoft has said “details coming later” I will say so explicitly, because a few important pieces (the opt-out API and the Security Store telecom catalog) are not published yet at the time of writing.

Why Microsoft is doing this

The short version: SMS and voice are the weakest links in the MFA chain, and attackers know it. Phone-based factors are vulnerable to SIM swapping, SS7 interception, social engineering of telecom support desks, and – increasingly – AI-assisted phishing that walks a user through approving a fraudulent prompt in real time. Microsoft’s own numbers have long shown that SMS is roughly 40% less effective at preventing compromise than the Authenticator app, and neither of them holds up against a well-built adversary-in-the-middle (AiTM) phishing kit. Passkeys do, because the credential is cryptographically bound to the site it was registered for – there is nothing for the user to type or approve on a fake page.

Microsoft has been signaling this direction for years: system-preferred MFA, the passkey registration campaign feature, mandatory MFA for Azure management, and the Secure Future Initiative. The July announcement is the point where the signaling stops and enforcement begins. SMS and voice are no longer positioned as secure authentication methods in Entra ID, and Microsoft will simply stop delivering them natively.

It is worth being clear about the scope: only Microsoft-provided SMS and voice delivery is being retired. Microsoft Authenticator (push and TOTP), hardware OATH tokens, FIDO2 security keys, Windows Hello for Business, certificate-based authentication, and external/third-party MFA methods are all unaffected. And SMS/voice as a concept does not disappear entirely – organizations with a genuine regulatory or operational need can keep it by bringing their own telecom provider through the Microsoft Security Store (more on that below).

The timeline – dates you need in your calendar

Here is the full sequence of events. I recommend literally putting these in your team calendar today.

Date What happens
August 1, 2026 API support and documentation for the temporary opt-out becomes available. This lets you delay the September changes while you finish your migration (details below).
September 1, 2026 Users enabled for SMS or voice in the Authentication Methods Policy (or legacy per-user MFA settings) are automatically enabled for passkeys. Your registration campaign is set to Microsoft managed, targeting passkeys, and these users are pulled into scope. On their next MFA sign-in they are nudged to register a passkey (skippable, with unlimited snoozes by default).
September 7, 2026 (Related change) Self-service password reset only accepts authentication methods the user has actually registered.
September 18, 2026 Microsoft publishes the telecom provider options, terms, and pricing information in the Microsoft Security Store.
October 30, 2026 You can select and configure a customer-managed telecom provider through the Security Store if you need to keep SMS or voice.
February 1, 2027 Microsoft-provided SMS and voice delivery is retired. Users whose only MFA method is SMS or voice get a blocking passkey registration prompt at sign-in – no more skipping. There is no opt-out from this milestone. It applies to all tenants in the public cloud.

Two things stand out. First, the September 1 changes are automatic – if you do nothing, Microsoft changes your authentication methods policy and your registration campaign settings for you. Second, February 1, 2027 is a hard wall. The temporary opt-out only postpones the nudging, not the retirement itself. Every plan you make should work backwards from February 1.

Note that this timeline applies to the public cloud. Sovereign and government cloud environments follow a later schedule that Microsoft will communicate separately.

What actually changes in your tenant on September 1

This is the part most summaries gloss over, so let us be precise. If you have users enabled for SMS or voice on September 1, 2026, Microsoft will:

  1. Auto-enable passkeys (FIDO2) in your Authentication Methods Policy for those users, placed in a passkey profile that allows all passkey types – synced passkeys (iCloud Keychain, Google Password Manager) as well as device-bound passkeys (Microsoft Authenticator, Entra passkey on Windows, hardware security keys).
  2. Set your registration campaign to “Microsoft managed”, targeting passkeys. Under Microsoft managed, the snooze duration becomes one day, snoozes are unlimited, and targeting expands to MFA-capable users. In practice: every time an affected user completes MFA (at most once per day), they see a “set up a passkey” interrupt they can skip.
  3. Nudge users at their next MFA sign-in. The nudge is evaluated per device-and-browser combination – a user with Windows Hello for Business will not be nudged on their Windows PC in Chrome or Edge, but the same user may be nudged when signing in from a Mac or a phone, because that credential does not travel with them.

If that is exactly what you want – great, you can lean back and let Microsoft drive registration for you. But in most organizations you will want to control the pacing, the communication, and the target method yourself. Everything below shows you how.

Step 1: Find out who is actually affected

Before you plan anything, get the numbers. “We use the Authenticator app” is what every IT manager tells me; the registration report almost always tells a different story – old accounts that registered a phone number in 2019, frontline workers, service-adjacent accounts, board members, external consultants.

Entra admin center Authentication methods Policies blade showing SMS and Voice call enabled for All users
Entra ID > Authentication methods > Policies – SMS and Voice call still enabled for All users.

Option A: Microsoft’s official analyzer script

Microsoft published a dedicated PowerShell script for exactly this purpose: the Entra SMS and Voice Usage Analyzer on GitHub. Run it with Global Reader, Security Reader, or Authentication Policy Administrator, and it reports which users are enabled for and actively using SMS or voice. Any non-zero result means your tenant is in scope for this whole exercise.

Option B: The user registration details report

In the portal: Entra ID > Authentication methods > User registration details. Filter on the registered methods column for Phone / Alternate phone / Office phone, and pay special attention to users whose default MFA method is a phone-based one. Note that this report requires a Microsoft Entra ID P1 license – in an unlicensed tenant the blade returns a 401, so fall back to the analyzer script or Graph below.

Option C: Microsoft Graph PowerShell, if you want it scriptable

Connect-MgGraph -Scopes "AuditLog.Read.All","UserAuthenticationMethod.Read.All"

# Pull registration details for all users
$details = Get-MgReportAuthenticationMethodUserRegistrationDetail -All

# Users with any phone-based method registered
$phoneUsers = $details | Where-Object {
    $_.MethodsRegistered -match 'mobilePhone|alternateMobilePhone|officePhone'
}

# The high-risk subset: phone is their DEFAULT (or only) MFA method
$phoneDefault = $phoneUsers | Where-Object {
    $_.DefaultMfaMethod -in @('mobilePhone','voiceMobile','voiceAlternateMobile','voiceOffice','sms')
}

$phoneOnly = $phoneUsers | Where-Object {
    -not ($_.MethodsRegistered -match 'microsoftAuthenticator|passKey|windowsHelloForBusiness|fido2|softwareOneTimePasscode|hardwareOneTimePasscode')
}

$phoneUsers    | Export-Csv .\phone-users-all.csv -NoTypeInformation
$phoneOnly     | Export-Csv .\phone-users-ONLY-phone.csv -NoTypeInformation

"Any phone method: {0}  |  Phone as default: {1}  |  Phone as ONLY method: {2}" -f `
    $phoneUsers.Count, $phoneDefault.Count, $phoneOnly.Count

The three buckets matter because they need different treatment:

  • Phone registered, but stronger methods too: lowest risk. These users just need their default flipped (system-preferred MFA usually handles this already) and eventually a passkey.
  • Phone as default: will notice the change. Needs communication.
  • Phone as the ONLY method: these are the users who hit the blocking registration prompt on February 1, 2027. This list is your migration backlog, sorted by priority.

While you are here, create a security group (for example SG-MFA-PhoneOnly-Migration) and fill it with the affected users. You will reuse it for the registration campaign scoping, for Conditional Access pilots, and for targeted communication.

Step 2: Decide where each user segment lands

Do not try to move everyone to the same method. In every migration I have run, the population splits into three or four segments:

  1. Knowledge workers with a Windows PC or Mac: passkeys, full stop. Windows Hello for Business already covers the primary device for many; add a synced or Authenticator-based passkey for the phone and browser scenarios. No license cost, phishing-resistant, and it satisfies the February 2027 requirement.
  2. Mobile-first users who already have Authenticator: passkey in Microsoft Authenticator. The app they already have becomes a device-bound passkey store. This is usually the smoothest single upgrade in the whole project.
  3. Frontline and shared-device users: this is where you slow down and think. FIDO2 hardware keys work brilliantly for shared-PC scenarios. For users with no corporate phone and no personal-phone policy, hardware OATH tokens remain supported (they are not part of this retirement) – just remember they are not phishing-resistant, so treat them as transitional.
  4. The genuinely stuck: regulated out-of-band SMS requirements, alarm and dispatch numbers, environments where smartphones are banned. This small segment is what the customer-managed telecom provider option exists for. Document the requirement (which regulation, which scenario) – you will want that paper trail anyway.

Synced versus device-bound passkeys deserves a sentence: synced passkeys (iCloud Keychain, Google Password Manager) are the most user-friendly and survive device loss, but the private key follows a consumer cloud account. Device-bound passkeys (Authenticator, security keys, Entra passkey on Windows) keep the credential on hardware you can reason about. Microsoft’s September auto-enablement allows all types; if your security team wants device-bound only, configure that in the passkey (FIDO2) policy yourself – and note that a restricted passkey profile changes the nudge behavior (see the suppression section below).

Step 3: Enable and configure passkeys properly

If you let the September 1 auto-enablement do this for you, passkeys arrive with an open, allow-everything profile. Doing it yourself first means you choose the settings – and you take the change out of Microsoft’s hands.

In the Entra admin center: Entra ID > Authentication methods > Policies > Passkey (FIDO2).

Passkey FIDO2 settings blade with Enable toggle, All users target and the default passkey profile
Passkey (FIDO2) settings – Enable and target with the default passkey profile.

The settings that matter:

  • Enable the method, targeting either all users or your migration group to start with.
  • Allow self-service set up: must be Yes, both for users to register from My Security Info and for the registration campaign nudge to work at all.
  • Enforce attestation: only if you have a real requirement – attestation-enforced profiles suppress the registration nudge, which may be exactly what you do not want during a migration.
  • Key restrictions / AAGUIDs: same caveat. If you restrict to specific security key models, the Microsoft managed campaign will not switch to passkey targeting automatically, and nudge behavior changes. Restrict deliberately, not by inherited habit.

For the enterprise-grade rollout, follow Microsoft’s phishing-resistant passwordless deployment guide – it covers the persona-based approach in far more depth than I can here.

Step 4: Run the registration campaign on your terms

The registration campaign (“nudge”) is the engine Microsoft will use in September – but you can start it earlier, scope it tighter, and pace it yourself. A campaign you run in August against a pilot group beats a Microsoft managed campaign that hits everyone in September.

In the portal: Entra ID > Authentication methods > Registration campaign.

Registration campaign blade set to Microsoft managed targeting Passkey FIDO2 with 1 day snooze and unlimited snoozes
Registration campaign – this tenant is already on Microsoft managed, targeting Passkey (FIDO2) with a 1-day snooze and unlimited snoozes.

Configuration that has worked well for me:

  • State: Enabled (not Microsoft managed – Enabled gives you control of every knob).
  • Target method: Passkey (FIDO2). Note you can only run one campaign at a time – passkeys or Authenticator, not both.
  • Include targets: your pilot group first, then the SG-MFA-PhoneOnly-Migration group in waves. Do not start with All users.
  • Days allowed to snooze: 3 or 7 during the soft phase. This is tenant-wide, not per group.
  • Limited number of snoozes: Disabled (unlimited) during the pilot; switch to Enabled (three skips, then required) when you move to enforcement mode. The snooze counter is tracked per user and survives configuration changes.

The same policy via Graph, if you prefer infrastructure-as-code (permissions: Policy.ReadWrite.AuthenticationMethod):

PATCH https://graph.microsoft.com/v1.0/policies/authenticationMethodsPolicy

{
  "registrationEnforcement": {
    "authenticationMethodsRegistrationCampaign": {
      "state": "enabled",
      "snoozeDurationInDays": 3,
      "enforceRegistrationAfterAllowedSnoozes": false,
      "excludeTargets": [],
      "includeTargets": [
        {
          "id": "<objectId of SG-MFA-PhoneOnly-Migration>",
          "targetType": "group",
          "targetedAuthenticationMethod": "fido2"
        }
      ]
    }
  }
}

A few behaviors worth knowing before your help desk finds out for you:

  • The nudge only appears after a successful interactive MFA – users inside an existing SSO session are not interrupted.
  • Conditional Access policies scoped to Register security information are evaluated first. If you restrict security info registration to compliant devices or trusted networks (and since July 6, 2026 these policies are enforced during Windows Hello for Business and macOS Platform SSO enrollment too), users outside those conditions silently do not get nudged. Plan for how those users will ever register.
  • Closing the browser counts as a snooze.
  • The passkey nudge checks whether the user has a local passkey for the current device-and-browser combination. Expect users to report “it keeps asking me even though I already did it” when they switch between PC, Mac, and phone. That is by design; put it in your FAQ.

Step 5: Communicate like the sign-in experience depends on it (it does)

Coordinated communication is the single biggest predictor of a smooth rollout – Microsoft says the same thing in their deployment guidance, and my experience agrees. The pattern that works:

  1. Awareness (now to August): “SMS and phone-call MFA is being retired by Microsoft. Here is why, and here is what will replace it.” Scope it to the affected group – blasting the whole company about a change that only touches 15% of users creates noise and ticket volume for nothing.
  2. Action (September onwards): step-by-step registration guides per device type – Windows Hello, iPhone/iCloud, Android/Google, Authenticator. Microsoft has ready-made end-user templates at aka.ms/mfatemplates that you can rebrand.
  3. Reminder (November-January): targeted mails to the shrinking list of users who still have no phishing-resistant method, with a hard date. Pull the list from the same Graph report you used in step 1 and watch it trend toward zero.

Give the help desk a one-pager: what the nudge screen looks like, how to register each passkey type, what “Skip for now” does, and – critically – what changes on February 1, 2027, when skipping stops being an option.

Need more time? Your two extension options

Now for the part many of you scrolled here for. There are two legitimate ways to buy time, and they solve different problems. Neither of them moves the February 1, 2027 wall.

Option 1: The temporary opt-out (September 2026 to February 2027)

Microsoft is providing a temporary, tenant-level opt-out from the September 1 changes – the passkey auto-enablement and the automatic registration campaign switch. This is aimed at organizations that have a different plan (for example, migrating to a customer-managed telecom provider, rolling out hardware keys on their own schedule, or moving users to another method) and do not want Microsoft touching their authentication methods policy in the meantime.

What we know as of late July 2026:

  • The opt-out is exercised via API, and Microsoft publishes the API details and documentation on August 1, 2026. Keep an eye on the official retirement page – that is where it will land.
  • It delays the September 1 auto-enablement and nudging while you complete your transition activities.
  • It is temporary by design: it covers the September 1, 2026 through February 1, 2027 window. On February 1, enforcement applies to all tenants, opted out or not. Users whose only method is SMS or voice will face the blocking passkey registration prompt unless you have configured a telecom provider.

My advice: even if you plan to opt out, do it as a scheduling decision, not an avoidance decision. Opting out without a dated migration plan just moves your crunch from September to January.

Option 2: Keep SMS/voice with a customer-managed telecom provider

If you have a genuine regulatory or operational requirement for a telephony factor – out-of-band SMS mandated by a compliance regime, users in environments where nothing else works – you can continue using SMS and voice past February 2027 by contracting with a telecom provider through the Microsoft Security Store:

  • September 18, 2026: Microsoft publishes the provider catalog, terms, and pricing in the Security Store. Evaluate providers against your regional and compliance requirements.
  • October 30, 2026: configuration opens. You select a provider, stand up the contract through the marketplace flow, and wire it into your tenant.
  • Costs: this is the part to socialize with management early. Unlike today, where SMS delivery is bundled into your licensing, the customer-managed model is your contract with the carrier – typically per-message pricing that varies by provider, volume, and geography. Migrating users to passkeys costs nothing; keeping SMS becomes a line item.

Treat this as a scoped exception, not a tenant-wide strategy: identify the specific user segments with the documented need, put them on the customer-managed channel, and default everyone else to passkeys. Between the carrier cost, the audit questions, and the fact that SMS remains phishable, the economics push the same direction as the security argument.

One more planning note: test the provider flow with a pilot group well before February. You do not want to discover carrier delivery quirks in specific countries during the enforcement week.

Suppressing the registration prompts while you work out your plan

Maybe you are mid-negotiation with a telecom provider. Maybe your change advisory board meets quarterly. Maybe you simply do not want users seeing Microsoft-branded prompts before your communication has landed. Whatever the reason, here is how you keep the nudges away from your users – deliberately and reversibly.

The clean way: take your users out of scope before September 1

The September auto-enablement only targets users enabled for SMS or voice in the Authentication Methods Policy or legacy per-user MFA settings. If you migrate users to other methods and disable SMS/voice for them before September 1, there is nothing for Microsoft to auto-enable and nobody gets pulled into the Microsoft managed campaign. This is the option Microsoft itself points to, and it has the advantage of actually solving the problem rather than postponing it.

SMS settings blade with Enable toggle, target scoping and Use for sign-in option
SMS settings – Enable and Target with group scoping and the Use for sign-in option.

The control way: set the registration campaign yourself

The registration campaign is a tenant setting, and your configuration is the control surface. To stop nudging entirely:

Portal: Entra ID > Authentication methods > Registration campaign > set State to Disabled > Save.

Graph:

PATCH https://graph.microsoft.com/v1.0/policies/authenticationMethodsPolicy

{
  "registrationEnforcement": {
    "authenticationMethodsRegistrationCampaign": {
      "state": "disabled",
      "snoozeDurationInDays": 1,
      "enforceRegistrationAfterAllowedSnoozes": true,
      "excludeTargets": [],
      "includeTargets": []
    }
  }
}

If you want the campaign running but need to shield specific populations – VIPs mid-quarter-close, a factory site with no phones, a business unit in the middle of a divestiture – use exclude targets instead of disabling the whole thing:

{
  "registrationEnforcement": {
    "authenticationMethodsRegistrationCampaign": {
      "state": "enabled",
      "snoozeDurationInDays": 7,
      "enforceRegistrationAfterAllowedSnoozes": false,
      "excludeTargets": [
        { "id": "<objectId of SG-MFA-Nudge-Excluded>", "targetType": "group" }
      ],
      "includeTargets": [
        { "id": "all_users", "targetType": "group",
          "targetedAuthenticationMethod": "fido2" }
      ]
    }
  }
}

Exclusion wins over inclusion – a user in both lists is excluded. And remember the softer levers before you reach for Disabled: a long snooze duration (up to 14 days) with unlimited snoozes is a much gentler campaign than the Microsoft managed default of daily prompts.

Registration campaign State dropdown open showing Enabled, Disabled and Microsoft managed options
The State dropdown is your control surface: Enabled, Disabled, or Microsoft managed.

What suppression does NOT do

Three honest caveats, because I have seen all three misunderstood already:

  1. Disabling the campaign today does not prevent the September 1 change. Microsoft sets the campaign to Microsoft managed as part of the rollout. Expect to re-assert your configuration after September 1, or use the official opt-out API from August 1 – that is the supported mechanism for exactly this scenario.
  2. Other setup prompts still exist. Security defaults, SSPR combined registration enforcement, and Conditional Access policies requiring MFA registration are separate mechanisms. The registration campaign switch only controls the passkey/Authenticator nudge.
  3. Nothing suppresses February 1, 2027. The blocking prompt for SMS/voice-only users is enforced for all tenants. Microsoft has been unusually explicit: there is no opt-out from that milestone. Suppression buys you communication time; it does not buy your users a future with SMS codes.

Lock in the gains with authentication strengths

Once a user segment has registered passkeys, close the door behind them. A Conditional Access authentication strength policy requiring Phishing-resistant MFA for your most sensitive applications (or for privileged roles) ensures that a registered passkey is not just an option sitting next to a weaker method – it becomes the method that actually gets used. The built-in strengths cover the common cases:

  • Phishing-resistant MFA: passkeys (FIDO2), Windows Hello for Business, certificate-based authentication. This is the end state.
  • Passwordless MFA: the above plus Authenticator passwordless sign-in. A good intermediate target.
  • MFA: the classic list, including SMS and voice – which is exactly why you want to move off it.

Sequence matters here: roll out authentication strengths after registration in each wave, not before. If you require phishing-resistant MFA from users who have not registered a passkey yet, and they cannot satisfy the security info registration CA policy either, you have built a deadlock the service desk gets to untangle with Temporary Access Passes, one ticket at a time. Pilot group, registration wave, comms, then the strength policy – in that order, per wave.

This is also the answer to a question I get a lot: “if SMS stops working in February, does that not just mean attackers move to phishing our Authenticator prompts?” Yes – retiring SMS is necessary, not sufficient. Authentication strengths are how you convert the passkey rollout from a registration statistic into an actual reduction of attack surface.

Quick answers to the questions everyone asks

Does this affect Microsoft 365 personal or family accounts? No – this timeline is about Microsoft Entra ID (work and school accounts) in the public cloud. Consumer accounts and sovereign clouds run on their own schedules.

Are Authenticator push notifications and TOTP codes going away too? No. Only Microsoft-provided SMS and voice delivery is retired. Authenticator, TOTP, hardware OATH tokens, FIDO2 keys, Windows Hello for Business, and certificate-based authentication all continue.

Will my users get locked out on February 1, 2027? Not locked out – blocked-until-registered. A user whose only method is SMS or voice will be required to register a passkey during sign-in before they can continue. That is a support-heavy morning if it hits hundreds of users at once, which is the entire argument for doing this on your own schedule.

We use a third-party MFA provider through external authentication methods – are we affected? External MFA methods are not being retired. But if some of your users are also enabled for Entra SMS or voice, those users are in scope for the September auto-enablement, so clean up the policy targeting.

Can I keep using SMS for SSPR only? Only through a customer-managed telecom provider. The retirement covers SSPR as well as MFA.

Do not forget SSPR

The retirement applies across Entra, including self-service password reset. If your SSPR policy leans on phone-based verification, those methods stop working on the same February 2027 date unless a customer-managed provider is in place. Combine that with the September 7, 2026 change (SSPR only accepts methods the user has registered) and the message is clear: your SSPR method policy needs the same review as your MFA policy. Microsoft has said that password change support for passwordless users is coming, but if passwords are still part of your world, make sure every user has at least two non-phone methods registered – Authenticator plus email, or Authenticator plus security questions – before you switch off phone options.

Lessons learned from the field

These are the things the documentation will not tell you, collected from migrations I have run or rescued:

1. The registration report always contains surprises. Every tenant I have analyzed had phone-only users nobody expected: meeting room accounts someone MFA-enabled in a panic, a CFO whose Authenticator broke in 2023 and “temporarily” fell back to SMS, external bookkeepers, that one integration account a vendor set up with a real mobile number. Run the report before you estimate the project, not after.

2. Check your break-glass accounts first, not last. If your emergency access accounts use voice call as a factor (it was a common recommendation a decade ago), fix that this week. FIDO2 hardware keys stored in physically separate locations is the pattern. You do not want to discover this dependency during an incident in March 2027.

3. Per-user MFA settings are still lurking in older tenants. Users enabled through the legacy per-user MFA portal are in scope for the September auto-enablement too. If you never finished the migration to the Authentication Methods Policy, this is the forcing function – converged authentication methods migration first, then the passkey rollout. Doing them simultaneously multiplies the confusion.

4. The nudge’s per-device evaluation generates tickets. Users who registered a passkey on their PC get nudged again on their phone and conclude “it didn’t work”. Pre-empt it in your comms: one passkey per platform is normal, and Windows Hello for Business does not follow you to your iPhone.

5. Conditional Access and the nudge interact silently. A CA policy that locks security info registration to compliant devices will quietly prevent nudges for users on unmanaged devices – which, in a BYOD-heavy organization, can be most of the affected population. Decide on a registration path for those users (Temporary Access Pass issued by the service desk works well) before you turn on enforcement.

6. Watch out for shared phone numbers. Shops, wards, and warehouses where one number backs ten accounts break in interesting ways when those accounts each need an individual passkey. FIDO2 keys on a lanyard have solved this everywhere I have tried them.

7. Guests are in scope, and passkey support for B2B is not fully there yet. Microsoft says passkey support for B2B and internal guests lands by end of 2026 – which is cutting it close to February 2027. Inventory your guest users with phone-based MFA now, and consider whether external MFA trust settings (accepting the home tenant’s MFA claim) can take them out of the equation entirely.

8. Do not let “temporary” become permanent. Every extension mechanism in this post – the opt-out, the telecom provider, long snoozes, exclusion groups – is a bridge. Put an expiry date and an owner on each one the day you create it. The tenants that struggle in January 2027 will be the ones that treated September’s opt-out as a solution.

9. Sell the upside, not just the deadline. Passkeys are genuinely faster – no more typing codes, no more “open the app on your other phone”. Users who experience a passkey sign-in once rarely want to go back. Frame the change as an upgrade with a deadline, not a compliance chore, and your registration numbers will show the difference.

My recommended plan, condensed

  1. Now: run the analyzer script and the registration report. Build the affected-users group. Check break-glass accounts.
  2. August: decide per segment: passkey, Authenticator bridge, hardware key, or (rarely) telecom provider. If the September auto-changes conflict with your plan, grab the opt-out API details on August 1 and file the change request. Configure the passkey policy yourself before Microsoft does it for you.
  3. September-October: pilot the registration campaign against IT, then wave by wave. Send awareness and action comms. Evaluate the Security Store catalog (from September 18) if you have a telephony requirement, and configure the provider from October 30.
  4. November-December: flip the campaign to limited snoozes for the stragglers. Chase the phone-only list down toward zero. Fix SSPR methods.
  5. January 2027: buffer month. Nothing new – just verification, reporting, and the final targeted reminders before the February 1 enforcement.

References and further reading

Wrapping up

Microsoft retiring SMS and voice MFA is not a surprise direction – it is the industry direction with a date on it. The organizations that will sail through this are the ones that treat September 1, 2026 as their deadline for having a plan, not February 1, 2027 as their deadline for panicking. Run the report today, segment your users, take control of the registration campaign before Microsoft’s defaults do it for you, and use the extension mechanisms for what they are: bridges with an expiry date.

If you want help assessing your tenant – from a quick phone-method inventory to a full passkey rollout – you know where to find me.

Enhanced Host Pool Management for Azure Virtual Desktop is Now GA: How to Set It Up

Microsoft has announced that enhanced host pool management for Azure Virtual Desktop is now generally available. In short: you can now create a host pool with a session host configuration, and the platform takes over the work of creating and updating session hosts for you. I set it up in my own tenant, and in this post I will walk through the setup step by step, including two gotchas the wizard will not warn you about.

What actually changes

With a standard host pool, you deploy session hosts yourself and keep them updated yourself. A host pool with a session host configuration flips that model:

  • Session host configuration: one definition of what every session host should look like: image, VM size, OS disk, network, domain join and the local admin credentials.
  • Session host management policy: how changes roll out: batch size, logoff behavior and the time zone used for scheduling.
  • Session host update: when you change the image or configuration, Azure Virtual Desktop replaces the session hosts for you, batch by batch.
  • Autoscale can create and delete session hosts based on demand, not just start and stop them.

There is also no registration token to manage anymore: the service handles agent registration itself.

Before you start

  • Only pooled host pools support session host configuration.
  • You choose the management approach when the host pool is created. An existing host pool cannot be converted, and you cannot switch back.
  • The local administrator credentials for the session hosts must come from Azure Key Vault: the wizard only offers Key Vault references, not inline username and password fields.

Step 1: Prepare the Key Vault

Create a Key Vault with two secrets, one for the VM admin username and one for the password. Do this before you open the host pool wizard: the wizard caches the vault list when it loads.

If your vault uses the access policy permission model, you must also grant the Azure Virtual Desktop service access to read secrets:

az keyvault set-policy -n kv-tm-avd-prod-001 \
  --object-id <AVD-provider-object-id> \
  --secret-permissions get list

Step 2: Basics

In the Azure portal, go to Azure Virtual Desktop, select Host pools and select Create.

Azure Virtual Desktop host pools list in the Azure portal with the Create button

Pick Pooled, and set Create Session Host Configuration to Yes. This is the decision that enables the whole feature set. Set your load balancing algorithm and max session limit as usual.

Create a host pool Basics tab with Create Session Host Configuration set to Yes

Step 3: Session hosts

You can set the number of session hosts to 0 and still define the full configuration. That is exactly what makes this approach nice to prepare in advance, since autoscale or a later update can create the hosts. I used the Windows 11 Enterprise multi-session 25H2 image with Microsoft 365 Apps, Trusted launch, a name prefix, my virtual network and Microsoft Entra ID join.

Session hosts tab with zero session hosts, name prefix and virtual machine location

At the bottom of the tab, the virtual machine administrator account is referenced from Key Vault: two dropdowns for the vault and secret holding the username, and two for the password.

Virtual machine administrator account referenced from Azure Key Vault secrets in the host pool wizard

Step 4: Management

The wizard assigns a system-assigned managed identity to the host pool and shows exactly which roles it will get, including Desktop Virtualization Virtual Machine Contributor on the session host resource group and Key Vault Secrets User on the credential vault. You need Owner or User Access Administrator rights for these role assignments to succeed.

Management tab showing the managed identity and role assignments including Key Vault Secrets User

Step 5: Review and create

Validation checks the configuration, and the deployment creates the host pool, the application group and the session host configuration.

Review and create tab with validation passed

On the host pool overview you can now see Uses Session Host Configuration: Yes, and the toolbar has new Start, Restart and Stop commands that operate on the whole pool.

Host pool overview showing Uses Session Host Configuration Yes and the new Start, Restart and Stop commands

Two gotchas from my deployment

  1. Key Vault access: portal validation passed, but the deployment failed with UnableToAccessKeyVaultSecret. The role assignments the wizard creates are Azure RBAC, so if your vault runs the access policy permission model, the Azure Virtual Desktop provider has no access. Grant it an access policy as shown in step 1 and redeploy.
  2. VM size restrictions: my subscription had no access to Standard_D2as_v5 in West Europe, which also only surfaced at deployment time. Check availability first with: az vm list-skus -l westeurope –query "[?name=='Standard_D2as_v6'].restrictions"

Read the GA announcement and the host pool management approaches documentation for the full details, including how session host update handles drain, logoff and rollback.

Auto-Updating Enterprise App Catalog Apps in Intune: What GA Actually Changes

Third-party app patching has been the quiet tax on every Intune estate I run. Chrome, 7-Zip, Notepad++, Zoom, the JDKs – none of them are hard to package, but multiplied across a catalog of apps and a monthly cadence, the packaging-and-supersedence treadmill eats real hours. Enterprise App Management (EAM) took the first bite out of that when it shipped the Microsoft-hosted Enterprise App Catalog. The auto-update option – now Generally Available – takes the rest.

I read the short write-up on Xplore the Cloud and it is a good primer on the toggle. This post goes a layer deeper: the licensing reality, how auto-update differs from guided supersedence, the caveats Microsoft tucks into the docs that will bite you in production, how to monitor it, and a rollout playbook I would actually follow with a customer.

On the visuals in this post. Rather than embed portal screenshots, I have linked each step to the exact Microsoft Learn page that shows the official UI – so the images you see are always current with the portal instead of going stale in a blog. If you are reproducing this internally, capture from your own tenant so the branding matches.

What EAM and the Enterprise App Catalog Actually Are

Enterprise App Management is an Intune capability that gives you a Microsoft-curated catalog of prepackaged Win32 apps (EXE and MSI) hosted by Microsoft. When you add one, Intune pre-fills everything you would normally reverse-engineer yourself:

  • Install and uninstall commands
  • Detection rules (file version, file size, registry)
  • Requirements (OS architecture, minimum OS)
  • Restart behaviour, return codes, install context (system vs user)

The catalog is large – well over a thousand titles today, from Adobe Acrobat and Google Chrome for Business to the whole Eclipse Temurin / Zulu JDK matrix, 7-Zip, Notepad++, Firefox, PowerToys and Wireshark. Content is served from *.manage.microsoft.com and installed by the Intune Management Extension (IME) – not winget, which is a common misconception.

See the current catalog and the add flow: Add a Windows catalog app (Win32) to Intune on Microsoft Learn lists every title and walks the wizard step by step.

The licensing reality (check this first)

EAM is not part of base Intune. It requires a subscription in addition to Intune Plan 1/Plan 2, and you get it one of three ways:

  1. As part of the Microsoft Intune Suite
  2. As the standalone Enterprise App Management add-on SKU
  3. Bundled into Microsoft 365 E5 – the change that makes this genuinely worth revisiting, because a lot of my customers already own E5 and were never using the feature

A quick way to confirm the entitlement is actually provisioned: go to Apps > Windows > Create and open the App type dropdown. If Enterprise App Catalog app is not in the list, the tenant does not have EAM enabled yet – licensing alone is not enough, the entitlement has to be present. (I checked a Plan-2-only tenant while writing this and the option simply is not there, which is the fastest tell.) See Microsoft Intune plans and pricing for the SKU details.

Two Update Models: Guided Supersedence vs Auto-Update

Before GA, keeping a catalog app current meant guided update supersedence: Intune surfaced available updates under Apps > Enterprise App Catalog apps with updates, you created a new app version, and you wired up a supersedence relationship to replace the old one. Controlled, reviewable – and manual. It is still fully supported and documented under Guided update supersedence for Enterprise App Management.

Auto-update collapses that loop. Enable it on a catalog app with a Required assignment and Intune detects new catalog versions and pushes them to targeted devices automatically. No new app, no supersedence relationship, no monthly click-through.

Here is the honest comparison:

Guided update supersedence Automatically update
Trigger You create the new version + supersedence Intune detects the catalog version
Review before deploy Yes No
Phased rollout / rings Yes (via assignments) No – all targeted devices at once
Assignment types Required and Available Required only
Rollback / uninstall remediation You control it None built in
Change-control friendly Yes Not really
Effort per update Manual, recurring Zero after setup

Neither is strictly better. Auto-update is fantastic for the low-risk long tail (utilities, runtimes, browsers on a fast ring). Guided supersedence still earns its keep where you need a maintenance window, a pilot ring, or a change record.

Enabling Auto-Update

The switch lives in the app-creation wizard, not in a global setting. When you add an Enterprise App Catalog app, the update method is presented as part of the flow:

  1. Apps > Windows > Add > Enterprise App Catalog and pick your app.
  2. Work through the app information and configuration (accept the pre-filled install/detection logic unless you have a reason not to).
  3. On the assignment step, set a Required assignment – auto-update does nothing for Available assignments.
  4. Choose the update method: the default is Update with Supersedence; select Automatically update instead.

The exact screen: the update-method choice appears on the assignments step. Microsoft documents it under Add a Windows catalog app – Step 6: Assignments, which shows the “Automatically update” option in context.

You can spot auto-update apps afterwards by adding the catalog/auto-update column or filter in the Windows apps list. Note that the list does not pin a static version number for these apps – the version is whatever the catalog currently serves, which is the whole point.

The Caveats That Will Bite You

This is where the vendor blogs stop and production begins. Microsoft documents these limitations, but they are easy to miss (see the Limitations and known issues section of the Enterprise Application Management docs):

  • You cannot flip the update method on an existing app. Supersedence -> auto-update (or back) is not editable. To move an already-deployed app onto auto-update you create a new catalog app with auto-update, then use supersedence to uninstall the old one. Plan the migration; there is no in-place switch.
  • No rollback or automatic uninstall remediation. If a bad version ships, auto-update will not pull it back. Remediation is manual – an Uninstall intent or a remediation script.
  • Malicious-version revocation is on you to remediate. If Microsoft pulls a compromised version from the catalog, it posts a notice in the admin center, but you have to find and fix affected devices.
  • Catalog cache lag of up to one hour. The catalog is cached, so a revoked or new version can take up to 60 minutes to reflect – a real exposure window during a security event.
  • No rollout rings or phased deployment. New version out = every targeted device, simultaneously. There is no built-in ring. If you want staging, you build it yourself with separate assignment groups, or you stay on guided supersedence.
  • Reporting shows latest state only. Intune keeps the current reported state per device, not a full version history. Mid-rollout, different devices legitimately show different states.
  • Not supported as a blocking app in the Enrollment Status Page or Autopilot Device Preparation. Use a fixed-version catalog app for ESP gating.
  • No running-app detection. Intune cannot tell whether the app is open when it updates. For an editor or browser mid-session, that can mean a forced close. This is the caveat I would flag hardest to end users.
  • Do not double-manage a title. If a separate LOB/Win32 assignment targets the same app, you get a version race condition. One app, one deployment type.

Monitoring Auto-Update

You lose the pre-deploy review gate, so lean harder on reporting:

  • Enterprise App Catalog apps with updates (Apps blade) – shows which catalog apps have newer versions available. For auto-update apps this is informational, but it is your catalog-freshness pulse.
  • Managed Apps report (per device) – lists installed/not-installed/available apps for a device with application, version, resolved intent, and install status. This is your ground truth for “what version is actually on this machine right now.” See Intune reports overview – Managed Apps report.
  • Per-app device install status – the standard app monitoring blade still applies; expect churn while a version rolls out because reporting reflects only the latest state.

Automating with Graph

Everything above is Graph-addressable through the deviceAppManagement/mobileApps surface (win32CatalogApp / mobile app supersedence resources). If you manage app deployments as code, you can query which catalog apps are on auto-update and audit assignments in bulk rather than clicking through the portal – handy across a multi-tenant MSP estate.

# Requires Microsoft.Graph, scope DeviceManagementApps.Read.All
Connect-MgGraph -Scopes "DeviceManagementApps.Read.All"

# List Enterprise App Catalog (Win32 catalog) apps and their assignment intent
Get-MgDeviceAppManagementMobileApp -Filter "isof('microsoft.graph.win32CatalogApp')" -ExpandProperty assignments |
  Select-Object DisplayName, Id,
    @{n='Intent';e={ ($_.Assignments.Intent) -join ',' }} |
    Format-Table -AutoSize

Treat the exact resource types as version-dependent – check the current Intune Graph reference before you build automation on them, because the catalog-app schema is still evolving.

A Rollout Playbook

This is roughly how I would introduce auto-update to a customer rather than flipping everything at once:

  1. Confirm licensing and entitlement. Intune Suite, the EAM add-on, or M365 E5 – and verify the Enterprise App Catalog app type actually appears in the Create wizard. If it is E5, you already paid for it.
  2. Pick the safe long tail first. Utilities and runtimes where a forced update mid-use is a non-event: 7-Zip, Notepad++, PowerToys, the JDKs, CLI tools. Leave user-facing editors and browsers for later.
  3. Deploy as a new Required app with Automatically update to a pilot group. Remember you cannot convert existing supersedence apps in place – build new and supersede the old.
  4. Watch the Managed Apps report for a cycle to confirm devices land on the expected version.
  5. Communicate the no-running-app-detection reality. Tell users that catalog apps may update and close silently, so they should save work. This single message prevents most of the support tickets.
  6. Keep guided supersedence for anything that genuinely needs a maintenance window, a phased ring, or a change record. Auto-update is a tool, not a religion.
  7. Do not double-manage. Retire any legacy LOB/Win32 package for a title before you put it on auto-update.

FAQ

Is EAM auto-update free?
No. It needs the Enterprise App Management entitlement – via the Microsoft Intune Suite, the standalone EAM add-on, or a Microsoft 365 E5 subscription that includes it. Base Intune Plan 1/Plan 2 alone does not surface the catalog.

Can I switch an existing catalog app from supersedence to auto-update?
No. The update method is fixed at app creation. Create a new catalog app with Automatically update, then use supersedence to uninstall the old one.

Does auto-update support update rings or phased rollout?
No. When a new version is published, it goes to all targeted devices at once. If you need staging, use separate assignment groups or stay on guided supersedence.

Does it work for apps assigned as “Available”?
No. Auto-update applies only to Required assignments. Available apps continue to use the existing update workflow.

Will Intune wait if the app is running?
No. There is currently no running-application detection, so an update can close an app that is in use. Warn your users.

Can I roll back a bad version automatically?
No. There is no built-in rollback. Remediate manually with an Uninstall intent or a remediation script.

The Bottom Line

Auto-update turns EAM from a faster packaging tool into something closer to a managed patch service for a large slice of your third-party Windows estate. For the low-risk long tail it is close to set-and-forget, and if you are on Microsoft 365 E5 it costs you nothing extra to start. Just go in eyes-open: there is no rollback, no native ring model, and no running-app detection, so match the update model to the risk of each app rather than reaching for the switch on everything. Start with the boring utilities, watch the reporting, and expand from there.

References and Further Reading

Using a FIDO2 Security Key Over RDP to Windows Server 2022: On-Prem, Hybrid and Entra-Joined

“I want to RDP into a Windows Server 2022 and log in with my FIDO2 security key instead of typing a password.” It sounds like a single feature you turn on. It is not. Whether it works at all depends on one thing most people skip past: what your server and your client are joined to.

Before you touch a single setting, you also need to be clear about which of two completely different things you actually want, because they share the word “FIDO2” and almost nothing else:

  1. Authenticate the RDP logon itself with a FIDO2 key – passwordless sign-in to the remote server.
  2. Redirect a FIDO2 key into the session so a web app or app inside the RDP session can use WebAuthn, while the key stays plugged into your local machine.

These have different requirements and different failure modes. Let me take them in order, and for the first one walk through all three join states.

First, the one that trips everyone up: a FIDO2 key is an Entra credential

This is the single fact that makes the rest of the post make sense. A FIDO2 security key is registered in Microsoft Entra ID. It is not, by itself, an on-premises Active Directory credential.

So when you log on to a remote server with a FIDO2 key, two things have to happen:

  • Entra ID authenticates the key.
  • Something has to turn that into a Kerberos ticket the on-prem world (and the server) understands.

That second step is where the join state decides your fate.

Scenario 1: FIDO2 sign-in to the RDP session

Entra-joined

The cleanest case. If both your client and the target are Microsoft Entra joined, FIDO2 sign-in over RDP works with the modern RDP stack (the web-account-selector flow) on current Windows 10, Windows 11 and Windows Server 2022 builds.

The catch with servers: pure Entra join is not supported on Windows Server. Server SKUs do not Entra-join the way a client does. So in practice “Entra-joined target” applies to Windows 10/11 remote hosts, and your Windows Server 2022 box lands in the hybrid scenario below even when the rest of your estate is cloud-first.

What you need:

  • Client (and where applicable the host) Microsoft Entra joined.
  • FIDO2 enabled as an authentication method in Entra ID > Authentication methods (see Microsoft’s FIDO2 enablement guide), with the user in scope and a key registered.
  • Current Windows builds on both ends and an up-to-date RDP client.

For an Entra-joined client signing into an Entra-joined Windows 10/11 host, there is no Kerberos-trust plumbing to configure – it largely just works once the method is enabled.

Hybrid-joined (this is where Server 2022 actually lives)

Because Windows Server 2022 cannot be pure-Entra-joined, hybrid is the realistic target join state for a server. Both the client and the server are Microsoft Entra hybrid joined – joined to on-prem AD and registered to Entra ID.

Here you must build the bridge that turns the Entra FIDO2 authentication into an on-prem Kerberos ticket. That bridge is Microsoft Entra Kerberos, deployed as cloud Kerberos trust:

  • Run the Entra Kerberos setup to create the Microsoft Entra Kerberos Server object in your on-prem AD. It shows up as a special computer object (effectively a read-only-DC-style KDC object) that lets Entra ID issue partial TGTs for your AD domain.
  • Configure Windows Hello for Business cloud Kerberos trust via Intune or Group Policy so the FIDO2/WHfB credential is allowed to request those tickets.
  • Enable the security key sign-in credential provider on the machines. On Entra-joined clients this is on by default; on hybrid-joined devices you turn it on explicitly – via Intune (Authentication method / “Enable security key sign-in”) or the equivalent ADMX policy Turn on security key sign-in under Computer Configuration > Administrative Templates > System > Logon.

With cloud Kerberos trust in place, the flow is: key authenticates to Entra, Entra issues a partial TGT, the on-prem DC completes it, and the server gets a Kerberos logon it trusts. Service tickets and authorization stay on your on-prem domain controllers – you are not moving authorization to the cloud, only the initial credential.

If FIDO2 RDP “authenticates but won’t log on to the server,” cloud Kerberos trust is almost always the missing piece.

On-prem only (no Entra at all)

Here is the honest answer: the native FIDO2 credential provider does not work for on-premises-only devices. Microsoft is explicit about this. No Entra, no FIDO2 sign-in – because there is nothing to issue the Entra side of the credential.

That does not leave you stuck, but it does mean changing the question. Your realistic options are:

  • Use the key as a smart card. Many FIDO2 keys also carry a PIV/smart-card applet. Stand up AD CS (your on-prem PKI), issue smart-card logon certificates onto the key, and you get certificate-based passwordless RDP using the long-standing smart-card logon path. RDP already knows how to redirect a smart card reader into the session. This is “passwordless RDP with a security key” in the literal sense, but the mechanism is smart-card logon, not FIDO2/WebAuthn.
  • Go hybrid. If passwordless-with-FIDO2 specifically is the goal, the supported route is to hybrid-join the estate and deploy cloud Kerberos trust as above. For most shops this is the better long-term answer than building out smart-card PKI just for RDP.
  • A third-party MFA-for-RDP product if you want a step-up factor on top of passwords without the PKI or Entra work.

So: pure on-prem FIDO2 sign-in is not a checkbox – it is either smart-card-via-PKI or a move to hybrid.

Scenario 1 at a glance

Join state (client + server)FIDO2 RDP logon?What you have to configure
Entra joined (Win10/11 host)YesFIDO2 method enabled in Entra; current builds
Hybrid joined (typical for Server 2022)YesEntra Kerberos (cloud Kerberos trust) + WHfB cloud trust + security key sign-in enabled
On-prem only (no Entra)Not nativelyKey-as-smart-card via AD CS PKI, or move to hybrid

Scenario 2: WebAuthn redirection into the session

Different problem, much smaller. You do not want to log into the server with the key – you want a website or app running inside the RDP session to use the FIDO2 key that is physically plugged into your local PC.

That is WebAuthn redirection, and the good news is:

  • It is supported on Windows Server 2022 (and Windows 10 1809+ / Windows 11).
  • It is on by default. There is no positive switch to flip – you only need to make sure nobody disabled it.

The control that matters lives on the server (the RDP host) as Group Policy:

Computer Configuration > Administrative Templates > Windows Components > Remote Desktop Services > Remote Desktop Session Host > Device and Resource Redirection > Do not allow WebAuthn redirection

Set it to Disabled or Not Configured to allow redirection. If it is Enabled, redirection is blocked and any in-session FIDO2 prompt fails instantly.

This is the one I see bite people most often, and the cause is almost always the same: a hardened golden image. CIS benchmarks and a lot of corporate baselines set “Do not allow WebAuthn redirection” to Enabled. If your security key worked fine on the local desktop but dies the moment you are inside RDP, check this policy before anything else. The ADMX comes from the Windows 11 22H2 administrative templates or newer, so make sure your Central Store is current too.

On a current Remote Desktop client you opt in on the Local Resources tab by ticking WebAuthn (Windows Hello or security keys). For the full walkthrough of using your key inside the session – including Windows 11 client cross-device passkey support – see the companion post: Using Your FIDO2 Key From Inside the RDP Session.

Picking the right path

  • “I want to log into the server with my key.” → Scenario 1. Find your join state in the table. For a real Windows Server 2022, that almost always means hybrid + cloud Kerberos trust.
  • “I want to use my key for a website/app running on the server.” → Scenario 2. Confirm “Do not allow WebAuthn redirection” is not Enabled, and you are done.
  • “We are on-prem only and want passwordless RDP.” → It is not native FIDO2. Either key-as-smart-card via AD CS, or move to hybrid.

Wrap-up

The reason “enable FIDO2 over RDP” has no single answer is that the key is an Entra credential and your server probably is not pure-cloud. Sort out the join state first, then the rest follows: Entra-joined is nearly free, hybrid needs cloud Kerberos trust, and on-prem-only means smart-card PKI or a hybrid move. And if it is really just an in-session web app you are after, the whole thing collapses to one Group Policy that your hardening baseline may have already turned off.

Getting Ready for Windows 11, version 26H2: Upgrade Paths, Autopatch, and Tracking Pilot to Production

Microsoft has confirmed the next annual feature update, Windows 11, version 26H2, and the headline for IT is a familiar one: this is an enablement package (eKB), not a full OS swap. If you have been through the 24H2 to 25H2 cycle, the playbook is almost identical – but there are a couple of new wrinkles worth planning around. This post walks through the supported upgrade paths, how you drive it with Windows Autopatch and Intune, and how to actually track the rollout from pilot to production.

What 26H2 actually is

26H2 shares the same servicing branch as 24H2 and 25H2. That means for devices already on those versions, the upgrade is delivered as a tiny enablement package – around 174 KB – that simply flips the version and build number (build 26300) after a single restart. No multi-gigabyte download, no long offline phase, no feature-update reboot marathon. The new capabilities ship continuously through monthly cumulative updates and are switched on by the eKB.

Microsoft frames it as “a predictable, low-disruption update experience for organizations and IT professionals,” and from a deployment standpoint that is exactly what it is – an update ring approval rather than a migration project. Expect general availability in the fall of 2026, in line with previous H2 releases.

Upgrade paths – know your starting point

The delivery method depends entirely on the version a device is sitting on today:

  • Windows 11 24H2 / 25H2 – direct eKB upgrade. ~174 KB, one restart. This is the easy 95% for most managed fleets.
  • Windows 11 23H2 and older – different servicing branch, so no eKB. These need the full feature-update media path (~6.5 GB download and the full upgrade experience).
  • The 26H1 caveat – 26H1 sits on a separate Windows core branch and does not roll forward to 26H2 via the standard enablement path. If you have any 26H1 (specialized/insider) devices, plan a different route for them.
  • Windows 10 – no shortcut here. These are full upgrades (or, frankly, replacements) and should already be on your end-of-support migration plan.
Windows 11 26H2 upgrade paths: 24H2/25H2 via enablement package, 23H2 and older via full media, 26H1 on a separate branch
Upgrade paths to 26H2 depend on the version a device sits on today.

Action before fall: run an inventory split by OS version now. Anything not already on 24H2/25H2 is your long-tail – get those onto a current branch first so 26H2 becomes a one-restart eKB rather than a 6.5 GB project.

Driving it with Windows Autopatch

If you are on Autopatch, 26H2 is close to trivial to approve – it appears in the feature update flow like any other release, and because the payload is tiny, distribution can complete in a day rather than weeks.

The mechanics you already rely on still apply. Autopatch groups split your estate into deployment rings – Test, First, Fast, and Last. If you do not define extra rings, Test acts as your pilot and Last as production. Releases flow sequentially through the rings, and Autopatch monitors device telemetry the whole way – if failure or compatibility signals spike, it can automatically pause progression to the next ring.

  • Pilot: keep Test/First small but representative – mix hardware models, key line-of-business apps, and a few power users who will actually report friction.
  • Soak time: because the eKB is so small, the temptation is to rush. Resist it – the value of a pilot is the soak window, not the download time. Give each ring a real bake period to surface app and driver issues.
  • Safety net: you retain Pause, Resume, and Rollback for feature updates directly from Intune if a ring goes sideways.

Not on Autopatch? The same model is available with Intune Feature Update profiles plus Update Rings – you target 26H2 as the feature update version and stagger deferrals/rings manually. You lose the automatic ring progression and telemetry-driven pause, but the staged approach is the same.

Autopatch deployment rings Test, First, Fast, Last with telemetry-driven pause and rollout tracking
Autopatch rings, the telemetry safety net, and what to watch as you promote from pilot to production.

Tracking pilot to production

This is where most rollouts get loose. “We deployed it” is not the same as “we can prove the estate moved.” Here is the reporting stack I lean on:

  1. Reports > Windows Autopatch – the two Autopatch reports give you ring-level rollout status and quality/feature update health. This is your primary “where is each ring” view.
  2. Reports > Device management > Windows Updates – the feature update report and readiness reporting validate which devices are eligible and which are blocked, before and during the push.
  3. Email notifications – make sure your Autopatch admin contacts are current so you actually receive the proactive alerts rather than discovering issues in a dashboard.
  4. A simple version-count KQL/report – track devices reporting build 26300 over time as your single “percentage on 26H2” number for management. Watch the curve per ring, not just the total.

Define your exit criteria before you start: e.g. pilot ring at >95% success with zero unresolved Sev-1 app issues for X days before releasing the next ring. Let the telemetry and your soak window – not the trivial download size – gate each promotion.

Support lifecycle

The usual split applies: Enterprise, Education, IoT Enterprise and Enterprise multi-session get 36 months of support, while Home, Pro, Pro Education and Pro for Workstations get 24 months (support running to roughly October 2028). Factor that into whether 26H2 is a “move now” or a “this fall” decision for each ring.

A short pre-flight checklist

  • Inventory by OS version – identify anything not on 24H2/25H2.
  • Get the long-tail (23H2 and older, Windows 10) onto a current branch first.
  • Flag any 26H1 devices for a separate path.
  • Confirm Autopatch groups / Intune feature update profiles and rings are sane.
  • Verify Autopatch admin contacts and reporting access.
  • Write down your per-ring exit criteria and soak windows.

Further reading and references

Bottom line: 26H2 is an approval, not a migration – for the devices that are on a current branch. Spend your effort on the long-tail and on a disciplined pilot-to-production cadence, and the eKB itself will be the least interesting part of the project.

PIM Tray: Activate Microsoft Entra ID PIM Roles From the Windows Tray

Entra ID PIM activation - PIM Tray Windows tray app

Entra ID PIM activation is a daily ritual for anyone who operates Microsoft Entra ID. If you operate Microsoft Entra ID for a living, you know the dance. Open the portal. Sign in. PIM. My roles. Activate. Type a reason. Pick a duration. Confirm. Repeat for every role, every shift, every customer.

Honestly, I do this on most days. So does every other IT pro I know.

This week, however, I finally decided I was done with it – so I built PIM Tray, a tiny Windows tray app that activates one or more Entra ID PIM roles in a single dialog. It is free, open source under MIT, code-signed, and on GitHub at github.com/ThomasMarcussen/PIMTray.

Entra ID PIM Activation in 30 Seconds: What PIM Tray Does

  • Sits in the Windows system tray as a shield icon.
  • Left-click opens a small window listing every role you are eligible for. Right-click shows the same list as a context menu, plus sign-in / sign-out / about.
  • Tick one or more roles, hit Activate, type a reason, pick a duration, done.
  • A single Windows toast tells you which roles activated, which are pending approval, and which failed – so partial success is obvious instead of buried.

That is essentially the whole pitch. In short: no browser, no tab switching, no clicking through six blades to find the same form you used twenty minutes ago.

Why I Built an Entra ID PIM Activation Tool

First, I tried the obvious alternatives.

  • The Entra portal is the canonical UX. It is fine for one role, painful for three, exhausting for ten.
  • Microsoft.Graph PowerShell with a snippet works, but I do not want to keep a terminal open for a 3 second action, and reason prompts in a shell are friction.
  • Microsoft Authenticator and WAM do not do PIM activation.
  • A couple of community tools exist, but none were code-signed, none batched, and one of them shipped its own browser.

In the end, what I actually wanted was a tool that lived where my other always-on tools live – the notification area – and respected the fact that admins activate roles in clusters, not one at a time.

Therefore I built PIM Tray, a small tool that turns Entra ID PIM activation into a one-click workflow that lives in the Windows tray.

How Entra ID PIM Activation Works in PIM Tray

In particular, there are three moving parts: authentication, discovery, and activation.

Authentication: MSAL Interactive Sign-In

PIM Tray uses MSAL (Microsoft.Identity.Client) as a public client. The default system browser pops, you complete MFA and Conditional Access the proper way, and the token is cached encrypted to disk at %LOCALAPPDATA%\PIMTray\msal_cache.bin via DPAPI. As a result, subsequent launches go silent until the refresh token expires.

Importantly, no password is ever typed into the app, and there is no embedded browser or token-stealing surface area.

Role Discovery: One Microsoft Graph Call

After sign-in, PIM Tray queries Microsoft Graph for every PIM role you are eligible for, with the scope expanded:

GET https://graph.microsoft.com/v1.0/roleManagement/directory/roleEligibilitySchedules
    ?$filter=principalId eq '&lt;your object id>'
    &amp;$expand=roleDefinition

As a result, every eligible role shows up in the list automatically, with its display name and scope (Directory or a resource path). There is no config file of role IDs to maintain.

Activation: One POST Per Checked Role

Then, for each role you tick, PIM Tray posts a self-activation request:

POST https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignmentScheduleRequests
Content-Type: application/json

{
  "action": "selfActivate",
  "principalId": "&lt;user object id>",
  "roleDefinitionId": "&lt;role id>",
  "directoryScopeId": "/",
  "justification": "Friday change window, ticket INC0001234",
  "scheduleInfo": {
    "startDateTime": "2026-05-12T07:30:00Z",
    "expiration": { "type": "AfterDuration", "duration": "PT4H" }
  }
}

Notably, errors surface verbatim from Graph. If your role policy requires approval, the request is created in pending state and the tray balloon says so. If the policy requires ticket info that the form does not capture, the call fails clearly. No magic, no silent retries, no surprises.

Under the hood, the whole app is .NET 9 WinForms. In total, the signed exe is about 1.3 MB, while the MSI installer is under 500 KB.

Entra ID PIM Activation: The Permissions Question

PIM Tray needs three delegated Microsoft Graph scopes:

  • RoleEligibilitySchedule.Read.Directory
  • RoleAssignmentSchedule.ReadWrite.Directory
  • User.Read

Specifically, there are two practical ways to satisfy them:

  1. Use the bundled default ClientId – the public Microsoft Graph PowerShell first-party app. The first sign-in shows the standard consent prompt. A Global Administrator can pre-consent at tenant level so end users never see the prompt again. Zero setup, but tenant-wide consent to a Microsoft-published app is heavier than some security teams want.
  2. Register your own Entra ID app. New registration, mobile and desktop platform, redirect URI http://localhost, the three delegated scopes above, admin consent granted once. Paste the resulting TenantId and ClientId into appsettings.json (auto-created at %APPDATA%\PIMTray\ on first run). Cleaner long-term, especially if you ship the tool to other admins in your tenant.

In addition, both paths are documented in the README. For personal use, option 1 is two clicks away.

Install

PIMTray.msi  ->  C:\Program Files\PIM Tray\PIMTray.exe

To get started, download the signed MSI from the v1.0.0 release. The MSI is signed with our EV certificate (DigiCert, with RFC 3161 timestamp) so SmartScreen and Microsoft Defender treat it normally and Add/Remove Programs shows a real publisher instead of Unknown.

Requirements:

  • Windows 10 or 11 (x64)
  • .NET 9 Windows Desktop Runtime on the target machine
  • At least one eligible PIM role on your signed-in account

Alternatively, to build from source, clone the repo and run dotnet publish -c Release -r win-x64 --self-contained false -p:PublishSingleFile=true. The exe lands in bin\Release\net9.0-windows\win-x64\publish\.

Frequently Asked Questions

Does PIM Tray support PIM for Groups?

Not in v1.0.0. The current release covers Entra ID directory roles via roleManagement/directory. Group-membership activations (identityGovernance/privilegedAccess/group/) are on the roadmap.

Does PIM Tray support Azure resource PIM (subscriptions, resource groups)?

Not yet. Azure RBAC PIM goes through roleManagement/rbacApplications and needs a different scope ID model. Tracking it as a roadmap item.

Does PIM Tray work with Conditional Access policies that require MFA on PIM?

Yes. In fact, authentication is interactive through MSAL using the system browser, which inherits all your Conditional Access policies, MFA prompts, and even Windows Hello / passkey flows. If your policy requires reauth for PIM, you get the standard Microsoft challenge.

Where is the token stored?

%LOCALAPPDATA%\PIMTray\msal_cache.bin, encrypted with DPAPI scoped to the current Windows user. The token never leaves your machine.

Is PIM Tray code-signed?

Yes. Both PIMTray.exe and PIMTray.msi are signed with an EV code-signing certificate from DigiCert and timestamped via RFC 3161, so the signature stays valid past certificate expiry.

Is PIM Tray open source?

Yes, MIT licensed. Source, issues and pull requests at github.com/ThomasMarcussen/PIMTray.

What is Next

The roadmap on the repo is short and honest:

  • PIM for Groups (group-membership activations)
  • Azure Resource PIM (subscription / resource group scopes)
  • Approval-pending polling so you do not have to refresh manually
  • Start at logon toggle in the About dialog
  • Optional dark mode

Finally, if you use PIM Tray and it shaves five minutes off your week, that is a win for both of us. Issues and PRs welcome.

Try It

If PIM Tray fits your Entra ID PIM activation routine and you build something on top of it, ping me. I would like to hear what other patterns admins want to automate next.


Thomas Marcussen is a Microsoft MVP and Technology Architect. More notes and tools at thomasmarcussen.com.

Fix the iTunes Sign-In Prompt on Intune-Managed iPhones: iOS Store App vs VPP Device Licensing

You manage a fleet of corporate iPhones through Microsoft Intune. Enrollment is automated through Apple Business Manager (ABM), apps deploy silently through the Volume Purchase Program (VPP), and users never see an App Store login. Then one day, your service desk starts getting tickets:

“Sign in to iTunes Store. Sign in to allow Contoso A/S to manage and install apps.”

A handful of devices show the prompt at first. A few days later, dozens. Users tap Cancel, the dialog disappears, and a few hours later it reappears. Some users sign in with personal Apple IDs to make it go away, which is exactly what you do not want on a corporate device.

This is one of those issues that looks like an Apple ID, ABM, or enrollment problem – but almost never is. In every case I have worked, the root cause was the same: somewhere in the tenant, an app was added as an iOS Store App when it should have been added as an iOS Volume Purchase Program app. This post walks through why those two app types behave so differently, how to confirm which one is causing the prompt, and how to fix the issue across a large device estate without disrupting users.

Why iOS Devices Ask for an Apple ID in the First Place

Intune offers several iOS app types in the admin center. Two of them install the same app from the same App Store listing, but they have completely different licensing and installation behavior:

  • iOS Store App – A direct link to a public App Store listing. The app installs into the user’s iCloud account. The device must be signed in to the App Store with a personal or managed Apple ID for the install to complete. There is no concept of device-based licensing.
  • iOS Volume Purchase Program app (VPP) – An app license that your organization owns through Apple Business Manager. With Device licensing, the license is assigned to the device itself – no Apple ID is required on the device for the install. The app simply appears.

The two app types look almost identical in the admin center. Both can point to the same App Store URL. Both can be assigned as Required, Available, or Uninstall. The difference is invisible until a device tries to install the app and discovers it has no Apple ID signed in.

When an iOS Store App is assigned as Required to a supervised device with no Apple ID, iOS does what it is told – it prompts the user to sign in so the install can proceed. That is the prompt your users are seeing.

Why You May Not Have Seen This Before

A fresh ABM enrollment with VPP apps assigned through Device licensing never triggers an Apple ID prompt because no app on the device needs one. The issue surfaces when somebody adds the same app a second time – as an iOS Store App – usually because they pasted the App Store URL into the wrong “Add app” wizard. The VPP version may still be present, but the iOS Store App duplicate is now competing for the same slot on the device, and only one of them can win.

How to Confirm This Is Your Issue

Before you start changing assignments, confirm the diagnosis. Three quick checks usually settle it.

Check 1: List All iOS Apps with Required Assignments

In the Intune admin center, go to Apps > iOS/iPadOS and filter the list. Look at every app where the App type column shows iOS store app. For each one, open the app and check Properties > Assignments.

Any iOS Store App with a Required assignment is a candidate for the prompt. iOS Store Apps assigned only as Available or Uninstall do not trigger the prompt – they sit quietly in the company portal or only act when the user actively removes the app.

Check 2: Cross-Reference with VPP

For each suspect iOS Store App, search for a VPP version of the same app. The naming will be similar but not identical – the VPP version typically shows the publisher and a different icon variant. If both versions exist, the iOS Store App is almost certainly redundant.

Check 3: Look at the Audit Log

Intune’s audit log will tell you exactly when each app was added and by which admin account. Go to Tenant administration > Audit logs and filter on the Mobile App category. Search for the app name and check the Create entries. In one recent case, an admin had bulk-added a dozen iOS Store App duplicates within a 20-minute window – clearly someone working through a list using the wrong wizard.

If checks 1 and 2 confirm the duplication and check 3 confirms when it happened, you have your root cause.

Why You Cannot Just Delete the iOS Store App

The natural reaction is to delete the iOS Store App duplicate and be done with it. Resist that urge until you have a rollout plan, because three things can go wrong:

  1. Users still see the prompt until iOS finishes its install queue. iOS does not automatically discard a pending install when its source is removed. The user has to Cancel the prompt at least once – sometimes more than once – before the MDM channel processes the change.
  2. Required and available install intent on a managed device is sticky. If the VPP version is not already assigned and licensed at the device level, removing the iOS Store App leaves users with no app at all.
  3. Filters and groups can overlap in non-obvious ways. If the iOS Store App is assigned to a broad group and the VPP version is assigned to a different broad group, deleting one may pull the app from devices that should still have it.

The safe sequence is: assign the VPP version with Device licensing first, validate on a single device, then remove the iOS Store App.

The Pilot Approach: Validate on One Device Using Assignment Filters

Before you touch a production assignment, prove the fix on one device. Intune’s Assignment Filters make this clean.

Step 1: Create a Single-Device Filter

In the Intune admin center, go to Tenant administration > Filters > Create.

  • Platform: iOS/iPadOS
  • Name: Something obvious like Pilot-iPhone-XYZ123-only
  • Rule syntax:
(device.deviceName -eq "XYZ123")

Replace XYZ123 with the actual device name from Devices > iOS/iPadOS devices. Use Edit in advanced mode if you prefer to write the rule directly.

Step 2: Exclude the Pilot Device from the iOS Store App Assignment

Open the problematic iOS Store App in Intune. Go to Properties > Assignments > Edit. On the existing Required assignment, click Filter and set:

  • Filter mode: Exclude
  • Filter: Pilot-iPhone-XYZ123-only

This tells Intune to apply the iOS Store App’s Required assignment to everyone except the pilot device. The pilot device is now isolated from the prompt – existing prompts may still need to be dismissed once, but no new ones will queue.

Step 3: Assign the VPP Version with Device Licensing to the Pilot Device

Open the VPP version of the same app. If it does not yet have a Required assignment to the same target group, create one:

  • Assignment type: Required
  • Group: The same group the iOS Store App was assigned to
  • License type: Device
  • Filter: Pilot-iPhone-XYZ123-only
  • Filter mode: Include

This is the inverse of Step 2 – the VPP assignment now applies only to the pilot device. The rest of your estate still gets the (about to be removed) iOS Store App version; the pilot device gets the VPP version with a device-bound license.

Step 4: Have the Pilot User Dismiss the Prompt and Sync

Walk the pilot user through these exact steps:

  1. When the iTunes sign-in prompt appears, tap Cancel.
  2. Open Settings > General > VPN & Device Management > the MDM profile.
  3. Tap Sync to force a check-in.

Within a minute or two, the VPP version of the app installs silently. No Apple ID prompt. The app shows the small organisation marker indicating it was installed by MDM.

If the install fails or the prompt comes back, stop and investigate before going further – usually the cause is a missing VPP license assignment or an expired VPP token (more on tokens below).

Rolling Out the Fix to the Rest of the Estate

Once the pilot is green, the rollout is mechanical. For each affected app:

  1. On the VPP version, remove the Pilot-XYZ123-only filter so the Required + Device-licensing assignment applies to the full target group.
  2. On the iOS Store App version, remove the existing Required assignment entirely. Do this before deleting the app to avoid an Intune sync that might re-prompt users.
  3. Delete the iOS Store App entirely once no devices reference it. This also makes sure nobody re-uses it accidentally later.

If you have several apps to fix, work through them one at a time. iOS handles MDM commands serially, so a batch change can produce more prompts than you would expect.

What Users Should Expect

Communicate clearly to end users before you flip the assignment. A short email along these lines works well:

Over the next 24 hours, you may see a sign-in prompt on your work iPhone asking you to log in to iTunes or the App Store. Please tap Cancel. Do not enter any Apple ID. The app you are missing will install automatically within a few minutes after you cancel the prompt.

The behaviour is non-obvious: iOS only processes the next MDM command after the current prompt is dismissed. Until the user taps Cancel, the device is effectively stuck waiting for the user.

Cleanup: Filters, Duplicates, and Audit Trail

After the rollout is complete, do not leave the scaffolding in place:

  • Delete the pilot assignment filter (Pilot-iPhone-XYZ123-only) so it does not get reused accidentally.
  • Confirm both iOS Store App duplicates are deleted – keeping them around “just in case” invites the same mistake again next quarter.
  • Document what happened in your change log so future admins know the difference between iOS Store App and VPP and which to use.
  • Run a tenant-wide review of remaining iOS Store Apps. Any iOS Store App with only Uninstall or Available (without enrollment) assignments is safe. Any iOS Store App with a Required assignment to a device group should be evaluated.

A Quick Reference: iOS Store App vs VPP at a Glance

AspectiOS Store AppiOS VPP App (Device licensing)
SourcePublic App Store URLApple Business Manager (purchased)
Requires Apple ID on deviceYesNo
Required-install on supervised devicesTriggers iTunes sign-in promptInstalls silently
License consumedNone tracked by MDMOne per device
Revoke licenseNot possibleYes, from Intune
Update behaviorSame as App StoreSame as App Store
CostFree apps only (in practice)Free and paid apps
Recommended for managed iOSNoYes

The short version: on a corporate-owned iOS device managed through Apple Business Manager, VPP with Device licensing is the only app type that should appear as Required for first-party and approved third-party apps.

How to Prevent This from Happening Again

The root cause is almost always procedural – an admin selected the wrong app type from the Intune wizard. A few controls reduce the chance of recurrence:

  • Document the standard. Add a one-line rule to your Intune operations doc: “All Required iOS apps must be added as iOS Volume Purchase Program apps. iOS Store Apps may only be used for Available or Uninstall assignments.”
  • Restrict app creation with RBAC. Use scope tags and Intune’s role-based access control to limit app creation to a small group of admins who know the difference. The principle of least privilege applies to MDM tenants too.
  • Use audit log alerts. Microsoft Graph + a small Logic App can email you whenever a new iOS Store App is created. Quick to set up, quick to react.
  • Check the VPP token expiry. A frequent secondary cause is an expired VPP token. When a token expires, Intune cannot create or renew Device licenses, and admins reach for “iOS Store App” as a workaround that turns into a permanent footgun. Renew the token annually and set a calendar reminder a month in advance.

Healthy VPP Token Practices

A VPP token has a 12-month validity. When it is close to expiry, Intune shows a banner in the Tenant administration > Connectors and tokens > Apple VPP Tokens view. After expiry:

  • Existing licensed apps continue to function.
  • New licenses cannot be assigned.
  • Token renewal requires a new .vpptoken file from Apple Business Manager.

If your token has just been renewed and apps are stuck in Failed state, revoke and re-assign licenses one app at a time. Bulk re-assignment occasionally fails for individual apps, and the only way to clear the failed state is a manual revoke + reassign cycle.

Troubleshooting: When the Prompt Will Not Go Away

If you have applied the fix and a specific device is still prompting, work through these in order:

  1. Has the user tapped Cancel at least once? iOS sometimes queues multiple install commands – the user may need to dismiss two or three prompts before the queue drains.
  2. Force a sync. From the device: Settings > General > VPN & Device Management > MDM profile > Sync. From Intune: Devices > select device > Sync.
  3. Confirm the device is licensed for the VPP version. Open the VPP app in Intune > Device install status. The device should be listed with Installed or Pending. If it is Not applicable, the assignment is not reaching the device – check group membership and filters.
  4. Check the VPP token health. Tenant administration > Connectors and tokens > Apple VPP Tokens. If the token shows any warning, address that first.
  5. Reboot the device. Last resort, but occasionally clears a stuck MDM channel.

If you have exhausted these, look at the device’s Managed Apps report. An app that should be VPP-licensed but appears under iOS Store App lineage indicates the old assignment is still active somewhere – usually a forgotten filter or a duplicate group assignment.

FAQ

Will users lose any data when I switch from iOS Store App to VPP?

No. The App Store install and the VPP install are the same app binary from the same listing. Local data and settings are preserved across the transition because iOS treats them as the same bundle ID.

Do I need a managed Apple ID for VPP with Device licensing?

No. Device licensing is the entire point – the license is bound to the device hardware identity, not to any Apple ID. The device can have no Apple ID signed in at all, and VPP apps will still install.

Can I keep using iOS Store Apps for some apps?

For apps you want to make optionally available to users through the Company Portal, yes – assign them as Available. For Required deployment to corporate-owned devices, no. Switch them to VPP.

What about iPadOS devices?

The same rules apply. iPadOS uses the same MDM commands and the same VPP licensing model as iOS. If you have iPads in the same affected group, they will exhibit the same prompt behaviour and be fixed by the same approach.

It can be. A token renewal sometimes leaves individual app licenses in a Failed state until they are re-assigned. This is a separate issue from the iOS Store App vs VPP problem, but you may encounter both at once if the same admin tried to “work around” the failed VPP state by adding iOS Store App versions. Treat the VPP licensing failures as a separate workstream once the prompt is gone.

Summary

If iOS devices managed by Microsoft Intune are showing an iTunes or App Store sign-in prompt, do not start with Apple ID configuration, ABM enrollment, or DEP profiles. Start with your app inventory. Look for iOS Store Apps with Required assignments that overlap with VPP versions of the same app. Fix one device first using assignment filters, then roll the change out to the rest of the estate, and finish by deleting the iOS Store App duplicates entirely.

The technical fix is simple. The harder part is preventing the next admin from making the same selection in the same wizard – so document the standard, restrict who can add apps, and keep your VPP token healthy. Your users will never see another iTunes prompt, and your service desk will get its mornings back.

References

How to Remove Classic Microsoft Teams with PowerShell and Intune Proactive Remediations

Microsoft officially retired Classic Teams on July 1, 2025, and the client is no longer functional. Despite this, many organizations still have remnants of Classic Teams scattered across their Windows device estate. This is not just a cosmetic issue. Classic Teams no longer receives security updates, the per-user installation model wastes disk space, leftover shortcuts confuse users, and end-of-life software can put you out of compliance. If you have been putting off the cleanup, now is the time to remove Classic Teams from your environment.

In this post I am sharing three PowerShell scripts that handle different scenarios, from a one-off standalone removal to a fully automated Intune Proactive Remediations approach.

Why You Need to Remove Classic Teams

Even though Classic Teams stopped working months ago, there are real reasons to actively remove it rather than just leaving it behind:

  • Security – Classic Teams no longer receives security updates, leaving a potential attack surface on your endpoints
  • Disk space – The per-user installation model means Classic Teams can consume hundreds of megabytes per user profile on a device
  • User confusion – Leftover shortcuts and autorun entries can confuse users, especially when New Teams is already deployed
  • Compliance – Many organizations have policies requiring the removal of end-of-life software from managed devices
  • Clean device state – Leftover registry entries and autorun configurations can interfere with New Teams or cause unexpected behavior

What Gets Removed

All three scripts target the same Classic Teams components:

  • Teams Machine-Wide Installer – The MSI-based installer typically deployed via SCCM, GPO, or during OS deployment
  • Per-user Teams installations – Classic Teams installed itself per-user under %LocalAppData%\Microsoft\Teams for each profile on the device
  • Autorun registry entries – Both HKLM and per-user Run keys that launch Classic Teams at logon
  • Desktop and Start Menu shortcuts – Leftover .lnk files pointing to the old Teams client
  • Teams Installer folder – The C:\Program Files (x86)\Teams Installer directory

Option 1: Remove Classic Teams with a Standalone Script

If you need to remove Classic Teams from a smaller number of devices, or want to run the cleanup through SCCM, ConfigMgr, GPO, or manually, use the standalone removal script. It handles the complete removal process in a single run: stops Teams processes, uninstalls the Machine-Wide Installer via msiexec, iterates through all user profiles to remove per-user installations, cleans up registry entries and shortcuts, and validates the result.

Script: Remove-ClassicTeams.ps1

Usage

Run the script as SYSTEM or with local administrator privileges:

powershell.exe -ExecutionPolicy Bypass -File Remove-ClassicTeams.ps1

The script creates a log file at C:\Windows\Logs\Remove-ClassicTeams.log for troubleshooting.

Option 2: Remove Classic Teams with Intune Proactive Remediations

For organizations managing devices through Microsoft Intune, the preferred approach is to use Proactive Remediations (now called Remediations in the Intune admin center). This gives you a detection script that identifies non-compliant devices and a remediation script that automatically cleans them up.

Detection Script

The detection script checks whether you still need to remove Classic Teams by scanning all common locations. If any remnant is found, it exits with code 1 (non-compliant), which triggers the remediation script. If the device is clean, it exits with code 0 (compliant).

Script: Detect-ClassicTeams.ps1

The detection checks include:

  • Teams Machine-Wide Installer in both 32-bit and 64-bit uninstall registry keys
  • Classic Teams folder, Teams.exe, and Update.exe in each user profile
  • Teams desktop shortcuts across all profiles
  • HKLM Run entry for Teams

Remediation Script

When the detection script flags a device as non-compliant, the remediation script will remove Classic Teams and perform the full cleanup. It goes further than the standalone script by also cleaning Start Menu and Startup folder shortcuts, loading offline user registry hives to remove per-user Run entries, and removing the Teams Installer folder from Program Files.

Script: Remediate-ClassicTeams.ps1

After remediation, the script runs its own validation. If all remnants are successfully removed, it exits with code 0. If anything remains, it exits with code 1, which Intune will flag for review.

Setting Up the Proactive Remediation in Intune

  1. In the Intune admin center, navigate to Devices > Remediations
  2. Click Create script package
  3. Give it a name, for example: Remove Classic Microsoft Teams
  4. Upload Detect-ClassicTeams.ps1 as the detection script
  5. Upload Remediate-ClassicTeams.ps1 as the remediation script
  6. Set Run this script using the logged-on credentials to No (runs as SYSTEM)
  7. Set Run script in 64-bit PowerShell to Yes
  8. Assign the remediation to a device group – start with a pilot group before targeting all devices
  9. Set the schedule – daily is recommended until the bulk of devices are cleaned up, then reduce to weekly

Logging

All three scripts write detailed logs to C:\Windows\Logs:

  • Remove-ClassicTeams.log
  • Detect-ClassicTeams.log
  • Remediate-ClassicTeams.log

Each log entry includes a timestamp, severity level (INFO, WARN, ERROR), and a descriptive message, making it easy to verify that the scripts successfully remove Classic Teams. This makes it straightforward to troubleshoot any issues through Intune device diagnostics or by reviewing the log files directly.

Summary: Remove Classic Teams the Right Way

Cleaning up Classic Microsoft Teams is a necessary task for any organization that has migrated to New Teams. Whether you run the standalone script through your existing deployment tools or leverage Intune Proactive Remediations for automated, ongoing compliance, these scripts give you a reliable way to get it done.

All scripts are available on my GitHub:

If you have questions or run into issues, feel free to reach out.

BlackLotus and the 2026 Secure Boot Certificate Expiry: What It Means and How to Fix It

If you manage Windows devices in any kind of enterprise environment, the Secure Boot certificate expiry is a deadline you really do not want to sleep on. The Microsoft certificates that have been the foundation of UEFI Secure Boot since Windows 8 are reaching the end of their lifetime in 2026, and the clock is ticking. The first wave of expirations begins in June 2026, and if your fleet is not ready by then, devices will start losing the ability to receive boot-level security updates and to trust software signed with new certificates.

The reason this matters is not just calendar housekeeping. The whole reason we are rotating these certificates in the first place is the BlackLotus UEFI bootkit (CVE-2023-24932), a piece of malware that can survive an OS reinstall and even bypass Secure Boot itself. The 2023 certificate set is the long term answer, and you need every Windows device in your environment trusting it before the old certificates roll off.

In this post I want to walk through what BlackLotus actually is, what is happening with the Secure Boot certificates, how the two are connected (but not the same thing), and what you can practically do about it today using Intune, PowerShell, and the great work that several Microsoft MVPs have already shared with the community.

A Quick Refresher on BlackLotus

BlackLotus is a UEFI bootkit that exploits CVE-2023-24932, a vulnerability in the Windows boot manager. What makes it particularly nasty is that it loads before Windows does, which means it sits underneath every traditional security control you have in the operating system. Antivirus, EDR, even a clean reinstall of Windows will not necessarily get rid of it, because the malicious code lives in the boot path that Secure Boot is supposed to protect.

Microsoft addressed CVE-2023-24932 with a multi-phase rollout that started back in 2023 and is still in progress today. The fix is not just a patch you install. It involves updating the bootloader, revoking the trust of the vulnerable boot manager, and ultimately replacing the certificates that Secure Boot uses to decide what is allowed to run. That last part is the piece we are dealing with right now.

The Secure Boot Certificate Expiry: What Is Actually Going Away in 2026

There are three Microsoft certificates from 2011 that are baked into firmware on basically every Windows device shipped in the last decade. Here is the short version of what is going away and when:

  • Microsoft Corporation KEK CA 2011 – the Key Enrollment Key authority. Expires June 2026.
  • Microsoft Corporation UEFI CA 2011 – signs third party UEFI components and option ROMs. Expires June 2026.
  • Microsoft Windows Production PCA 2011 – signs the Windows boot manager itself. Expires October 2026.

The replacements are the 2023 certificate set: Microsoft Corporation KEK CA 2023, Microsoft UEFI CA 2023, and Windows UEFI CA 2023. These are the certificates Microsoft is using going forward to sign boot components, and they are also the ones that carry the BlackLotus mitigations.

How BlackLotus and the Certificate Expiry Are Connected, but Not the Same Thing

This is the part I see people mixing up the most, so it is worth being precise. BlackLotus and the certificate expiry are two different problems that share a single solution.

  • BlackLotus (CVE-2023-24932) is a security vulnerability. It exists because the old boot manager can be tricked into running malicious code. The fix is to revoke trust in the vulnerable boot manager and replace it with a new one signed by a new certificate.
  • The 2026 certificate expiry is a lifecycle event. The 2011 certificates were always going to expire eventually. June 2026 is simply when their validity runs out.

Where they meet is the 2023 certificate set. Microsoft is using this rotation as the opportunity to also roll out the BlackLotus mitigations at the same time. So when you update a device to trust the 2023 certificates, you are doing two things in one go: you are getting it ready for life after the 2011 certificates expire, and you are closing the BlackLotus attack path.

If you do nothing, the consequences are not the same on both sides either. A device that never gets the 2023 certificates will still boot after June 2026. It just will not be able to install future Secure Boot updates, will not trust new third party UEFI components, and will remain exposed to BlackLotus style attacks. That is not a place you want to be.

How to Fix It

The good news is that the actual remediation is mostly registry plumbing. Microsoft ships the certificate update logic inside the cumulative update, and you opt a device in to receiving the new certificates by setting a value under HKLM\SYSTEM\CurrentControlSet\Control\Secureboot. Specifically, the AvailableUpdates DWORD controls which steps are applied. The current recommended value is 0x5944, which performs the full sequence: it adds the 2023 KEK to KEK, adds the 2023 DB entries, updates the boot manager, and updates DBX. After the registry value is set, the Microsoft\Windows\PI\Secure-Boot-Update scheduled task is what actually does the work, usually across one or more reboots.

At a high level the process for any device looks like this:

  1. Make sure the device is fully patched. Anything earlier than the July 2024 cumulative update is not going to do you any favors.
  2. Confirm that diagnostic data is set to at least Required, because the certificate update flow uses it.
  3. Set AvailableUpdates to 0x5944 under the Secureboot key.
  4. Trigger the Secure-Boot-Update scheduled task (or wait for it to run on schedule).
  5. Reboot. Sometimes more than once. Verify by checking the UEFICA2023Status registry value, which should eventually read Updated.
  6. Validate by querying the actual Secure Boot databases with PowerShell to confirm the 2023 certificates are present.

The cleanest way to do this at scale is with Intune Remediations. You build a detection script that reports back whether a device already has the 2023 certificates installed, and a remediation script that sets the registry values and kicks off the scheduled task. That gives you a single dashboard view of your whole fleet and lets you target the long tail of devices that need a nudge.

Things That Will Trip You Up

  • OEM firmware. Some older devices will need a UEFI/BIOS update from the manufacturer before they can accept the 2023 certificates. If you have a fleet that is more than four or five years old, plan on doing a firmware audit as part of this project.
  • Diagnostic data. If telemetry is set to Off (Security on Enterprise), the certificate update flow will not run. You need at least Required.
  • Dual boot and custom signed bootloaders. If you are running anything that depends on the 2011 UEFI CA (some Linux distributions, some hardware vendors’ utilities), test before you push the update broadly.
  • Virtual machines. Hyper-V Generation 2 VMs and Azure VMs are also affected. Do not forget the server side of the house.
  • Monitor first, remediate second. Microsoft’s recommended approach is to start with a monitor-only Intune Remediation that just reports status, so you understand the scope of the problem before you start changing anything.

Reference Articles From the Community

I am far from the first person to write about this, and several Microsoft MVPs have already done excellent deep dives that are well worth your time. If you are about to start this project, read these first:

GitHub Scripts You Can Use Today

If you would rather start from working code than write your own from scratch, several community members have published their detection and remediation scripts on GitHub. Always read through any script before deploying it in your environment, but these are good starting points:

Conclusion

The 2026 Secure Boot certificate rotation is one of those rare projects that touches every Windows device in your environment, including the ones nobody has thought about in years. It is also one of those projects that is going to be infinitely easier if you start now than if you wait until May 2026 and try to do it under pressure. The combination of Intune Remediations, the registry-based opt-in flow, and the great scripts already shared by the community means there is no real reason to put it off.

Start with monitoring so you know what you are dealing with, fix any firmware and telemetry prerequisites, and then roll out the remediation in waves. Closing the door on BlackLotus is a nice bonus on top of staying ahead of the certificate expiry, and your future self (and your security team) will thank you.

Synced Passkeys in Microsoft Entra ID – Now Generally Available

If you’ve been following the passwordless journey in Microsoft Entra ID, you already know passkeys have been around for a while. But until now, FIDO2 in Entra essentially meant hardware security keys – practical for your admins, not so much for 5,000 end-users who lose USB dongles faster than you can ship them.

With the March 2026 update, that changes. Synced passkeys are now GA.

Synced vs. Device-Bound – What’s the Difference?

Type Stored On Survives Device Loss Use Case
Device-bound passkey Single device or security key No Privileged accounts, high-security roles
Synced passkey Cloud-synced provider (iCloud Keychain, Google Password Manager, 1Password, etc.) Yes Broad workforce rollout

Synced passkeys are still FIDO2-based and still phishing-resistant. The difference is they follow the user across devices. Lost your laptop? Your passkey is already on your phone.

What Shipped Alongside It

This wasn’t a standalone release. Microsoft also GA’d passkey profiles, which let you define multiple FIDO2 policies targeting different user groups. That means you can enforce device-bound passkeys for Global Admins while allowing synced passkeys for standard users – same authentication methods policy, different profiles.

On top of that, the Conditional Access Optimization Agent (public preview) now supports automated passkey adoption campaigns. It assesses readiness, generates rollout plans, and creates policies in report-only mode before enforcement. And no – it doesn’t flip switches without your approval.

Getting Started

  1. Navigate to Entra admin center > Authentication methods > Passkeys (FIDO2)
  2. Create a passkey profile for your target group
  3. Allow synced passkey providers (iCloud Keychain, Google, third-party)
  4. Assign the profile to a security group
  5. Monitor adoption through the authentication methods activity report

For bulk FIDO2 provisioning, check out MichaelGrafnetter/webauthn-interop – a .NET library with a PowerShell module for registering passkeys on behalf of users via Graph API.

Further Reading

Wrap Up

Synced passkeys remove the hardware logistics barrier that kept phishing-resistant MFA out of reach for most organizations. Combined with passkey profiles and the new CA optimization agent, you now have the tooling to roll this out at scale – without shipping a single USB key. If you’ve been waiting for the right moment to push passwordless beyond your admin accounts, this is it.