Author: Wayne Bellows

  • Golden Image, 2026-10-19: Intune drops CNAME auto-discovery for MDM-only enrolment

    This week’s Golden Image is out: Intune drops CNAME auto-discovery for MDM-only enrolment.

    Read it at weekly.modern-euc.com →

  • Golden Image, 2026-10-12: Entra lets users make a passkey their first MFA method

    This week’s Golden Image is out: Entra lets users make a passkey their first MFA method.

    Read it at weekly.modern-euc.com →

  • How to Update an AVD Golden Image to Windows 11 26H2 Without a Bad Monday

    How to Update an AVD Golden Image to Windows 11 26H2 Without a Bad Monday

    Windows 11 26H2 landed in the Azure Marketplace in September, with multi-session images for Azure Virtual Desktop and new gallery images for Windows 365. Not long after, one admin on Reddit put it on their own machine, opened winver, and found that was the only thing that had changed.

    They weren’t wrong. 26H2 is an enablement package. It shares a codebase and a servicing branch with 24H2 and 25H2, so most of what’s “in” it has been arriving in monthly updates all year. The package flips the switch.

    So don’t look for a feature reason to rebuild your golden image this month. There isn’t much of one. The better reason is in the support dates. This post covers why the move is worth making, why I wouldn’t let a feature update policy make it for you on pooled hosts, and the way I’d actually do it: a validation host pool, a week of real users, and a rollback that’s one click rather than one weekend.

    The real reason to move: the clock, not the features

    Here are the end-of-servicing dates for Enterprise and Enterprise multi-session, straight from Microsoft’s release information page:

    | Version | Build | End of updates (Enterprise / multi-session) | |—|—|—| | 23H2 | 22631 | 10 November 2026 | | 24H2 | 26100 | 12 October 2027 | | 25H2 | 26200 | 10 October 2028 | | 26H2 | 26300 | 9 October 2029 |

    Two rows matter.

    The first is 23H2. If you still have a pooled host pool running a 23H2 multi-session image, you have about five weeks of security updates left. That pool is your priority this month, not the shiny new one. And because 23H2 is on a different codebase, it isn’t an enablement package jump for you; it’s a proper image rebuild.

    The second is 26H2. The image buys you support into October 2029. If you’re on 24H2 today, that’s two extra years on a build you’d be rebuilding at some point anyway. So pick your quietest month. October is fine. A January change freeze is not.

    Why I wouldn’t let a feature update policy do it

    On a physical laptop, letting Windows Update or Windows Autopatch roll out the enablement package is exactly what it’s designed for. On a pooled multi-session host, it’s the wrong tool. Microsoft now says so in writing.

    At the end of August, Microsoft published an AVD page on update methodologies for session hosts. For feature updates on Windows multi-session, Windows Update and Windows Autopatch are both marked Not recommended. Session host update and Azure Compute Gallery images are marked Recommended. In-place upgrades from Setup.exe or an ISO are Not recommended either.

    The reason is drift. A pooled host pool works because every host is the same. The load balancer doesn’t care which host a user lands on, and neither should the user. The moment some hosts take a feature update in place and others don’t (because they were shut down by autoscale overnight, or the install failed on one, or the reboot was deferred), you have two builds in one pool. The user who hits a problem on Tuesday might not hit it on Wednesday. That’s a nightmare to troubleshoot.

    There’s also the next re-image to think about. If the hosts updated themselves to 26H2 but the golden image is still 25H2, the next time you re-image or autoscale builds a fresh host, it comes back on 25H2. You’ve gone backwards. Nobody touched a thing.

    It’s worth checking which policy your session hosts actually sit in. A loosely written dynamic group is all it takes for pooled hosts to land in the same Intune feature update ring as the laptops. This week an r/Intune thread reported Autopatch devices pinned to 25H2 moving to 26H2 anyway. I haven’t reproduced that one, but it’s a good reason to keep pooled hosts out of that ring entirely.

    Step 1: Build the 26H2 image next to the old one, not over it

    The Marketplace SKUs you want are:

    • win11-26h2-avd (offer windows-11): Windows 11 Enterprise multi-session
    • win11-26h2-avd-m365 (offer office-365): the same, with Microsoft 365 Apps

    You can confirm what’s available in your region with:

    az vm image list-skus --publisher MicrosoftWindowsDesktop --offer windows-11 \
    --location uksouth --query "[?contains(name,'26h2')].name" -o tsv

    Build a new image VM from that, then layer your apps and config on exactly as you did for the current image. If you build with a custom image template or a pipeline, this is a parameter change. If you build by hand, I’d use this as the excuse to write the build down, because a rebuild from a fresh Marketplace image is when you find out which settings only ever lived in somebody’s memory.

    Publish it as a new version in Azure Compute Gallery and leave the current version alone. That previous version is your rollback, so don’t let a retention policy delete it the following week. I’d keep at least one known-good version until 26H2 has been in production for a full patch cycle.

    If you run Nerdio Manager, the same idea is built in. Desktop image versions are retained (you set how many to keep), and staging lets you put a new version alongside the active one and test it before you activate it. The current version stays as your backup.

    Step 2: A validation host pool with real users

    A test VM you log into yourself proves the image boots. That’s all it proves.

    I’d recommend a small validation host pool built from the 26H2 image, with the same host pool settings, session limits, RDP properties, and app groups as production. Then put real users in it: five to ten people from different teams, including at least one from whichever team uses the awkward line-of-business app. Give them a week. That’s long enough to catch the things that only happen once a week: the Monday report, the Friday month-end macro.

    If you’d rather not run a separate pool, you can add one or two 26H2 hosts to a production pool in drain mode and steer a test group to them. It works. It’s also the drift problem again, on purpose this time. I’d only do it if the pool is small and you’re watching it closely.

    Step 3: The test checklist

    This is the list I’d work through before anything goes to production. It’s not exhaustive; your own app estate decides the rest.

    • Line-of-business apps. Launch them, and do a real task in each, not just a splash screen. Anything with a licence server or a driver deserves extra attention.
    • Profile attach and sign-in time. Sign in, sign out, sign in again. Compare sign-in times against the current pool. If sign-in has gone from 30 seconds to 90, find out why before the users do.
    • Teams and media optimisation. A call with screen share and video, from the Windows App and from the web client if you support both.
    • Printing and redirection. Printers, scanners, USB devices, clipboard and drive redirection, whatever your RDP properties allow.
    • App attach packages. If you use them, confirm every package still mounts and registers.
    • Security tooling. Defender for Endpoint onboarding, your EDR, and any baseline you apply. Check the host shows up correctly in the portal, not just that the service is running.
    • Policy and layout. Start menu, taskbar, default apps, and anything else set by Intune or Group Policy. Settings occasionally move between releases.
    • The image build itself. If sysprep or the capture failed and needed a retry, write down why. The classic is a Store app that updated in one user’s profile on the image VM.
    • Monitoring and reporting. Any query, workbook, or compliance rule keyed to a build number. 26H2 is build 26300, so a check for 26200 will start flagging your new hosts as out of date.

    To confirm what every host in a pool is actually running, the session host resource reports its OS version:

    az rest --method get \
    --url "https://management.azure.com/subscriptions/$SUB/resourceGroups/$RG/providers/Microsoft.DesktopVirtualization/hostPools/$POOL/sessionHosts?api-version=2024-04-03" \
    --query "value[].{host:name, os:properties.osVersion, status:properties.status}" -o table

    Run it before and after the rollout. You want one build number per pool.

    Step 4: Roll it out with your normal image update

    Once the validation week is clean, I wouldn’t invent a special process for 26H2. Use your monthly image update. Whether that’s session host update, a re-image schedule in Nerdio Manager, or your own pipeline, the whole point is that it’s a process you trust and have run before.

    A few things I’d do differently from a normal month:

    • Go pool by pool. Start with the pool that has the fewest line-of-business apps and the most forgiving users, and finish with the one that keeps you up at night.
    • Roll out midweek. Tuesday or Wednesday gives you working days either side to spot problems. A Friday rollout means the first real users are on Monday morning, which is the bad Monday this post is named after.
    • Remember that image-based servicing replaces the VM. Microsoft’s docs say it plainly: user data and local storage on the session host isn’t kept. On a well-built pooled pool that’s the design, but if anything has quietly started writing to the local disk, you’ll find out now.

    Step 5: Rollback is a version number

    If something breaks after rollout, the fix is to point the host pool back at the previous image version and re-image. That’s it. You don’t uninstall anything, and you don’t hope the rollback option is still there in Settings.

    That’s why Step 1 matters. The rollback only exists if the old version is still in the gallery and you know which version number it is. Write it down in the change record before you start.

    A note for Windows 365

    Windows 365 has three 26H2 gallery images: Windows 11 Enterprise, Windows 11 Enterprise + Microsoft Apps, and the new Developer Configuration + M365 Apps image, which went GA in September. Changing a provisioning policy’s image affects newly provisioned or reprovisioned Cloud PCs, not existing ones, so the same principle applies in a different shape. Test the image on a small group before you switch the policy everybody provisions from. Existing Cloud PCs are single-session and do take feature updates through Windows Update or Autopatch, so the ring question is different there.

    Not exciting, and that’s fine

    The value of 26H2 is two more years of support and nothing much changing for your users, which is exactly what you want from a golden image.

    Three things I’d do this week:

    • Check for 23H2 multi-session first. 10 November 2026 is close.
    • Keep pooled hosts out of feature update rings. Microsoft’s own table marks them Not recommended for multi-session.
    • Build 26H2 as a new image version, give it a week with real users, and keep the old version until you’re sure.

    I’d love to hear how others are timing this one. Are you moving now, or waiting until after the new year?

  • Golden Image, 2026-10-05: Entra Connect Sync to Cloud Sync: six months to move

    This week’s Golden Image is out: Entra Connect Sync to Cloud Sync: six months to move.

    Read it at weekly.modern-euc.com →

  • Azure Virtual Desktop Hybrid Is GA. Microsoft Built Half of It on Purpose.

    Azure Virtual Desktop Hybrid Is GA. Microsoft Built Half of It on Purpose.

    I’ve had the same conversation three times this year, with three different customers who all have the same problem. They’re on Citrix, or Horizon, running on hardware they already own (VMware, Nutanix, or Hyper-V), and they don’t want to move to Azure Local. Azure Local means buying a specific validated hardware list from Dell or HPE and running Microsoft’s own hyperconverged stack on top of it. It’s a real product, but it’s a big, separate purchase, and for a lot of these customers, it’s the wrong answer to “get me off Citrix.”

    Azure Virtual Desktop Hybrid went generally available on 1 September 2026, and it’s built for exactly that gap. If you’re running AVD or thinking about running it, and you’ve got hardware you’re not ready to walk away from, this is worth fifteen minutes of your attention. Here’s what it actually is, why Microsoft only built it out to a certain point, and what that means for anyone deploying it without a partner behind them.

    What AVD Hybrid actually is

    Strip away the branding and it’s simple: the AVD control plane (brokering, the web/gateway service, Windows App connections) stays in Azure. The session hosts don’t. You run them on your own hardware, on whichever hypervisor you already have, and register them with Azure using an Azure Arc-enabled agent. Microsoft’s own description is blunt about it: you can run session hosts “on your preferred on-premises hypervisor that supports Windows virtual machines.” No certified hardware list, no proprietary stack to buy. You put the Arc agent on a VM, install the AVD extension, and it shows up in your host pool next to your cloud-hosted hosts.

    That’s the whole pitch, and it’s a genuinely different shape to Azure Local. Azure Local extends Azure’s control plane and management stack into your datacenter on hardware Microsoft has validated. AVD Hybrid does something narrower: it lets your control plane stay entirely in Azure while the compute stays wherever you already have it.

    Users connect the same way they do to any AVD session host: through Windows App, over the same protocol, with the same UI. That consistency is one of the things Microsoft calls out directly, and it’s not a small thing: your helpdesk doesn’t need a second runbook for “if it’s a hybrid session.”

    Why you’d actually use it

    Three scenarios have come up with real customers:

    You’ve got Citrix or Horizon on hardware you’re not ready to sunset. Modernising the broker and connection layer without a forklift migration to cloud compute is a genuinely attractive middle step, especially if that hardware still has years of depreciation left on it.

    Latency-sensitive or data-gravity workloads. CAD, medical imaging, anything where the session traffic needs to stay close to a local dataset. RDP ShortPath still gets you the local-network transport benefit, just without a public cloud hop for the compute.

    Regulated or sovereignty-constrained environments. Some organisations genuinely can’t put certain workloads in public cloud yet, for real regulatory reasons rather than habit. AVD Hybrid lets them get Azure’s management and identity story without moving the data.

    What it doesn’t solve is “we don’t want to touch the cloud at all.” The control plane is Azure, full stop, and your session hosts still need outbound connectivity back to Azure for brokering and management. If the objection is philosophical rather than data-residency-driven, this isn’t the escape hatch.

    The pros and cons, honestly

    Pros:

    • Uses hardware you already own, with no forced capex into a validated Azure Local hardware list
    • Arc-based registration is identity-driven and outbound-only over TCP 443; no inbound firewall holes, no site-to-site VPN required
    • One consistent user experience (Windows App) whether the host is in Azure, on-prem via Hybrid, or a Windows 365 Cloud PC
    • A genuine gradual migration path: move workloads to Azure compute later, on your own schedule, without changing how users connect

    Cons:

    • Windows 11 and Windows 10 Enterprise multi-session isn’t supported on Hybrid. Microsoft’s own licensing table for AVD Hybrid marks it “Not Supported,” full stop. If you want multiple users sharing session hosts on-prem, you’re on Windows Server with an RDS Client Access Licence, which is the same licensing weight Citrix and Horizon customers already carry today. It’s not a cost reduction on that front.
    • You still need reliable connectivity back to Azure. This isn’t an offline mode.
    • And the big one: Microsoft’s own documentation is explicit that AVD Hybrid “doesn’t provision or manage virtual machine state,” which means four things you’d normally take for granted on Azure-hosted AVD simply aren’t there.

    The gap Microsoft left, and why it’s deliberate

    That last point is worth sitting with, because it’s not a bug, it’s the design. Microsoft’s Learn documentation lists exactly what’s missing on a Hybrid host pool: power management, autoscale, Start VM on Connect, and Session Host Configuration. Their own words: “Organizations are responsible for deploying and managing their on-premises session hosts using hypervisor tools, scripts, partner solutions, or other tools.”

    Read that sentence again. Microsoft built the control plane, the Arc registration path, and the identity model, then explicitly handed off VM lifecycle management to whoever owns the hypervisor underneath: you, your scripts, or a partner. That’s not an oversight; it’s the same logic behind Azure Arc generally. Microsoft owns the thin registration and identity layer that has to be consistent everywhere, and leaves the deep, hypervisor-specific automation to the people who already know that hypervisor. Building native Nutanix AHV, VMware, and Hyper-V automation into the AVD product itself would mean maintaining three separate hypervisor integrations inside a first-party Microsoft product. That’s not where their engineering effort is best spent, and building AVD Hybrid this way is what let it ship across any hypervisor at GA rather than one.

    The practical result: without a partner layer on top, running AVD Hybrid at any real scale means someone on your team is scripting VM provisioning, image updates, and capacity management by hand, against whichever hypervisor API you’re on. That’s exactly the operational overhead most of these customers were trying to get away from when they started looking at moving off Citrix in the first place.

    What Nerdio Manager is doing about it

    This is where I have a direct line of sight, because Nerdio was a launch partner on AVD Hybrid alongside Microsoft. Nerdio Manager for Enterprise’s Hybrid support launched with Nutanix AHV as the first supported hypervisor, timed to Microsoft’s GA. What it adds on top of the bare Arc registration: image management (create, update, and deploy gold images for Hybrid session hosts the same way you would for Azure-hosted ones), automation for repeatable provisioning workflows, monitoring across your whole Windows cloud estate (Azure, Azure Local, and now Hybrid) from one console, and cost/utilisation reporting that spans all three.

    Nerdio hasn’t published a public timeline, but VMware and Hyper-V support are the expected next hypervisors after Nutanix, and I’d expect the same direction Nerdio already applies to Azure and Azure Local host pools: bring the automation Microsoft deliberately left out (autoscale, power management, lifecycle orchestration) up to the same standard, regardless of which hypervisor sits underneath. That’s the layer that turns “Microsoft gave you a registration path” into “you can actually run this without a team of scripters.”

    The takeaway

    AVD Hybrid GA is a genuinely useful option if you’ve got on-prem hardware you’re not ready to retire and a real reason (latency, sovereignty, depreciation schedule) to keep compute local while modernising everything around it. Just go in knowing Microsoft built the identity and control-plane layer, and left the VM lifecycle layer as someone else’s job. Check whether that someone is going to be you, with scripts, or a partner, before you commit a migration plan to it.

    If you’re running Citrix or Horizon on hardware you’re not ready to sunset, what’s actually stopping you from testing this? Genuinely curious whether it’s the licensing gap on multi-session, or something else entirely.

  • Golden Image, 2026-09-28: Azure Virtual Desktop classic retires September 30, 2026.

    This week’s Golden Image is out: Azure Virtual Desktop classic retires September 30, 2026..

    Read it at weekly.modern-euc.com →

  • Golden Image, 2026-09-21: Windows 365 Reserve: self-provisioning is now live

    This week’s Golden Image is out: Windows 365 Reserve: self-provisioning is now live.

    Read it at weekly.modern-euc.com →

  • Golden Image, 2026-09-14: Graph permission fix closes a licence data leak

    This week’s Golden Image is out: Graph permission fix closes a licence data leak.

    Read it at weekly.modern-euc.com →

  • Golden Image, 2026-09-07: AVD Hybrid is here: run session hosts on-prem

    This week’s Golden Image is out: AVD Hybrid is here: run session hosts on-prem.

    Read it at weekly.modern-euc.com →

  • Nerdio Global Pools: From a Fixed Split to a Deliberate One

    Nerdio Global Pools: From a Fixed Split to a Deliberate One

    If you manage Azure Virtual Desktop at any real scale, you already know the uncomfortable truth about host pools: they don’t know who your users are. A host pool has capacity, a region, and a desktop image. It doesn’t have an opinion about whether the person connecting to it is in Manchester or Mumbai, whether they need the finance app set or the sales one, or whether the pool next door has spare capacity and this one doesn’t.

    For years the answer to “how do I place users properly across a large AVD estate” has been: manually, pool by pool, in a spreadsheet somewhere. Nerdio’s new Global Pools feature, currently in Public Preview for AVD Premium, is the first serious attempt to turn that into policy instead of a project. The preview lays the foundation of an MVP feature that has huge potential for how you manage your host pools.

    The feature you’re probably already running: Host Pool Business Continuity

    Before Global Pools, there’s a feature most Premium customers already have switched on (or should): Host Pool Business Continuity Multi-Region Setup. It’s worth starting here, because it’s the feature Global Pools is quietly built to go beyond.

    It splits new VMs across a primary and secondary Azure region, evenly, and replicates FSLogix profiles between them using Cloud Cache. If a region goes down, users land in the surviving one. It’s a genuinely useful safety net, and it’s available today at host pool level.

    The catch is in that word “evenly.” The split is fixed at 50/50. There’s no weighting, and no way to choose which users go where. A user in Manchester has as much chance of landing in your secondary US region as a user based there already. The feature was built to survive a region failing, and it does that well, but it was never built to place people deliberately. It doesn’t know who the user is, or where they are; it just needs somewhere for them to land.

    That gap is exactly where Global Pools starts.

    What Global Pools actually is

    Nerdio’s own description, from the published KB article: Global Pools let administrators group multiple AVD host pools under shared assignment and failover policies, so users are automatically routed to the right host pool instead of being managed one pool at a time.

    The important architectural point is what it doesn’t touch. Global Pools sits on top of native AVD host pool logic and on top of Nerdio’s own Auto-scale engine. Global Pools is a placement and policy layer, not a new kind of host pool.

    Two things worth knowing before you go looking for it: it’s currently Public Preview, and it’s Premium edition only.

    How it works, in practice

    Strip away the marketing and the mechanics are fairly plain:

    • Assignment is driven by Entra ID group membership. You define policies that route members of specific Entra groups to specific Pool Groups (more on those in a second), with a configurable priority order for anyone who happens to sit in more than one group.
    • Pool Groups bundle one or more host pools together under a shared distribution mode (depth-first or breadth-first), and Nerdio automatically rebalances users across the host pools inside a Pool Group as capacity changes.
    • Sync runs every 15 minutes, automatically, with a manual sync button for when you don’t want to wait.
    • Auto-scale sizing can be percentage-based as well as the traditional fixed host count, useful if you want capacity to track the size of the pool rather than a hard number.
    • Failover policies redirect users from one Pool Group to another for planned maintenance or an outage. In the current release this is a manual cutover: an admin triggers it, it doesn’t happen on its own yet.
    • RemoteApps and the desktop image are defined once per Global Pool, not per Pool Group. The nice touch: you can build the RemoteApp catalogue as a placeholder before any host pool exists in the Global Pool at all. Native AVD doesn’t let you do that.

    None of that requires touching an API, incidentally, because there isn’t one yet. Everything is configured through the Nerdio Manager UI, and you’ll need the Nerdio Admin role to do it.

    Where this is meant to fit

    Nerdio names three scenarios for Global Pools, and they’re a reasonably honest description of who actually needs this:

    1. Large AVD deployments with enough host pools that manual per-pool assignment has stopped scaling.
    2. Failover between Pool Groups during planned maintenance or an outage.
    3. Organisations running multiple identity tenants who want one unified assignment model.

    What it doesn’t do yet

    Nerdio is upfront that this is Public Preview, and the documented gaps back that up:

    • Single-session desktops aren’t supported. If you’re running personal (1:1) host pools, Global Pools isn’t for them yet.
    • No import of existing host pools. Every host pool in a Pool Group has to be created fresh, one at a time, with its workspace and application group deployed manually. If you’re picturing dragging your current 200 host pools into a Global Pool this weekend, that’s not available yet.
    • Assignment is Entra group matching only. No percentage-based or attribute-based assignment, so you can’t yet say “60% of this group goes here, 40% goes there.” (Percentage-based auto-scale sizing is a separate feature and is available; don’t let the two get confused, because it’s an easy mix-up.)
    • Only core host pool profiles are supported inside a Global Pool: Active Directory, VM, and RDP/FSLogix. If your host pool profile relies on something outside that set, it’s not covered yet.
    • No public API yet. Everything is configured by hand in the Nerdio Manager UI.
    • Limited in-UI guardrails. Configuration issues like overlapping failover group membership aren’t flagged for you, so review your policy setup carefully before switching it on.

    None of that is a criticism. It’s a Preview feature, and Nerdio is treating it as one, which is the right call given how much is still moving underneath it.

    What to actually do about it

    If you’re running a handful of host pools, Global Pools probably isn’t solving a problem you have yet. If you’re managing dozens or hundreds across multiple regions, the shape of what Nerdio is building is worth understanding now, even before it’s something you’d put into production.

    Two practical steps:

    First, if you’re not already on it, check Azure Capacity Extender. It’s a separate, established Premium feature that lets you define fallback VM sizes when your preferred size runs out of capacity in a region. I’ve walked more than one customer through exactly that scenario this year, and it costs nothing unless it’s invoked, yet in a lot of estates it’s sitting there switched off. It solves a narrower problem than Global Pools (keeping a host pool running, not placing users across pools) but it’s available today and worth auditing regardless of where you land on Global Pools.

    Second, if you’re running enough host pools that manual assignment has become a real operational cost, get onto the Public Preview and give Nerdio feedback. The honest ask at this stage is “come and tell us what you need it to do,” not “go and build your architecture around this.” Preview features get shaped by the people willing to poke at them early. The gap between “staggered image rollout is listed as a scenario” and “staggered image rollout actually works” is exactly the kind of thing that gets closed faster when real admins are testing against real estates.

    Global Pools is trying to solve a problem that’s been genuinely unsolved in AVD: making user placement a policy decision instead of a spreadsheet. It’s not there yet. But the direction is right, and for anyone running AVD at real scale, it’s worth watching closely rather than waiting for the GA announcement to start paying attention.

    —

    Found this useful? I’d be glad to hear how you’re thinking about host pool placement at scale. Drop a comment, or find me at the next Nerdio event.