HomeNewsletterCommunityMVP FeedToolsArchiveBlogToday's NewsAboutServicesQuick Links Subscribe free
← Back to Blog
Windows Hello for Business WHfBDisable WHfBUsePassportForWorkIntuneGroup PolicyCleanup

How to Cleanly Disable or Remove Windows Hello for Business (Without Leaving Orphaned Keys)

IA
Imran Awan
31 July 2026

Here is a fact that surprises a lot of admins: Windows Hello for Business (WHfB) is enabled by default on every Microsoft Entra joined device. You did not turn it on. Autopilot did, silently, the moment the device enrolled. So when leadership says "we're not ready for passwordless, turn it off," you discover that "off" is not one switch - and that flipping the obvious one leaves orphaned keys scattered across your directory. This post covers how to disable WHfB cleanly, at the right layer, and how to clean up the credentials it already provisioned.

The problem: it was on before you decided anything

WHfB provisioning starts automatically after a user signs in to an Entra joined device, because the default state is "enabled." There is also a tenant-wide enrolment policy that most people never look at. The catch with that tenant policy: it only applies at enrolment time, and it applies to every device that enrols. So changing it does nothing for the thousands of devices already out there - and if you leave it enabled, every new Autopilot device keeps provisioning Hello regardless of what you do later.

That combination - default-on, tenant policy that only bites at enrolment, and per-device policy that applies afterwards - is why "just disable Windows Hello" turns into a three-part job.

Why it happens: three policy layers, one default

WHfB is configured through the PassportForWork Configuration Service Provider (CSP) or Group Policy - never a mix of both. There are three places "enabled" can be decided, and they resolve in a strict order:

Watch out: The MDMWinsOverGP setting does not apply to Windows Hello for Business. WHfB lives in the PassportForWork CSP, and MDMWinsOverGP only governs the Policy CSP. If you set WHfB by both GPO and CSP, the conflicting CSP settings are ignored until the Group Policy settings are cleared. Pick one channel per device and never mix them.

How to verify the current state

Before you change anything, read where WHfB stands on a sample device. Two signals: the policy value in the registry, and whether a credential is actually provisioned. The enablement value lives here (device scope shown; a user-scope key can override it):

Registry Editor — WHfB enablement (CSP / device)
HKLM\SOFTWARE\Microsoft\Policies\PassportForWork\<TenantId>\Device\Policies
UsePassportForWork REG_DWORD 0x00000001 # 1 = enabled, 0 = disabled

Group Policy writes a different value name (Enabled) under HKLM\SOFTWARE\Policies\Microsoft\PassportForWork. Then confirm whether a credential exists for the signed-in user:

Command Prompt
C:\> dsregcmd /status | findstr /i "NgcSet" NgcSet : YES # a Hello credential is provisioned for this user

The fix: disable at the right layer, then clean up

Step 1 - Stop new devices provisioning it

Set the tenant-wide policy to Not configured or disabled so new Autopilot enrolments do not turn Hello on:

Intune admin center Devices › Windows › Windows Enrollment Windows Hello for Business → Disabled

Step 2 - Turn it off on devices already enrolled

The tenant policy will not touch existing devices, so push a device policy that sets Use Windows Hello for Business to Disabled. In a Settings Catalog or Account protection policy that is one toggle; as raw CSP or registry it is UsePassportForWork = 0:

ChannelKey pathValue nameDisable value
CSP (device)HKLM\SOFTWARE\Microsoft\Policies\PassportForWork\<TenantId>\Device\PoliciesUsePassportForWork0
GPO (device)HKLM\SOFTWARE\Policies\Microsoft\PassportForWorkEnabled0

The Group Policy equivalent is Computer Configuration › Administrative Templates › Windows Components › Windows Hello for Business › Use Windows Hello for Business = Disabled. If you also want to stop auto-provisioning while a third-party tool handles it, that same policy exposes Don't start Windows Hello provisioning after sign-in (DisablePostLogonProvisioning).

Gotcha: Disabling the policy stops new provisioning and blocks Hello sign-in - but it does not delete the credential already sitting in the user's Hello container, and it does not remove the public key already registered in Microsoft Entra ID or msDS-KeyCredentialLink. "Disabled" is not "removed." Skipping the cleanup leaves orphaned keys behind.

Step 3 - Clean up the credentials it already made

On each affected device, in the user's context, delete the Hello container so no stale credential lingers:

Command Prompt (run as the signed-in user)
C:\> certutil.exe -deletehellocontainer Windows Hello container deleted successfully.

That removes the on-device credential cleanly. The registered public key then ages out; for a faster tidy-up, audit and remove stale entries from msDS-KeyCredentialLink (hybrid) or the user's registered keys in Entra ID, using the audit approach from the msDS-KeyCredentialLink deep dive.

Proof it worked

On a cleaned device, dsregcmd /status shows NgcSet : NO, the user is back to password/other sign-in, and no new Hello prompt appears at logon. New Autopilot devices enrol without provisioning Hello, and your directory key audit shows no growth in orphaned keys.

Note: There is a cleaner alternative to disabling-after-the-fact: pair a "disable WHfB" device policy with the Enrollment Status Page (ESP). The ESP holds the user at OOBE until required policies land, so the disable policy applies before the user ever reaches a desktop and Hello never provisions in the first place. That avoids the whole clean-up step for new devices.
Tip: Before you disable WHfB org-wide, ask whether you actually want it off or just want to choose your trust model. Most "turn off Hello" requests are really "we're not ready for the deployment we fell into by default." Cloud Kerberos trust is often less work than a clean removal - do not rip out passwordless if the real problem is that it was configured for you.

References

PowerShell Scripts — WHfB Enablement State

Script for this post is in Daily-Tasks.

Get-WHfBEnablementState.ps1 — read-only: reads the UsePassportForWork / Enabled policy values and NgcSet to report whether WHfB is on and whether a credential still exists to clean up
View all scripts on GitHub
Share this post
LinkedIn X / Twitter Reddit Bluesky

More from EndpointWeekly

Windows Hello for Business
Windows Hello for Business PIN Complexity: Every Setting, CSP…
The WHfB PIN complexity Group Policy is not where you would look, and PIN expiration…
Windows Hello for Business
Windows Hello Multifactor Device Unlock: Require a Trusted…
Trusted signal unlock makes a device open only when the user proves themselves AND the…
Windows Hello for Business
Windows Hello for Business During Autopilot: Why It Provisions…
A new Autopilot device pops a 'set up a PIN' prompt nobody configured - or fails…