HomeNewsletterCommunityMVP FeedToolsArchiveBlogToday's NewsAboutServicesQuick Links Subscribe free
← Back to Blog
Windows 11 Windows 11TPMSecure BootUEFICompatibility AppraiserWindows Update for BusinessIntuneEndpoint AnalyticsMBR2GPTSafeguard Holds

Why this device cannot upgrade to Windows 11: reading the real hardware gate instead of guessing

IA
Imran Awan
21 August 2026

A user opens Windows Update and sees a line telling them the PC does not currently meet Windows 11 system requirements. That single sentence is the entire diagnostic output. There is no field naming the check that failed, no value, no code. So the guessing starts.

Some admins order replacement laptops. Some paste a registry bypass from a forum without knowing what it does to their support position. Almost nobody reads the check that actually failed, even though Windows wrote it to disk in at least three places before it showed that message.

The short version

"Not eligible for Windows 11" is one message hiding several independent gates: a 64-bit CPU on the published supported list, TPM 2.0 present and enabled, UEFI firmware that is Secure Boot capable, 4 GB of memory and a 64 GB system disk. Microsoft documents exactly what the compatibility appraiser writes when one of them fails: an UpgEx colour and a RedReason value such as Tpm, UefiSecureBoot, CpuFms, Memory or SystemDriveSize, under HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags. Read that value and you know which gate to act on. And the honest position on bypasses: Microsoft's own installer text says a device installed this way "will no longer be supported and won't be entitled to receive updates", so a bypass is a decision about support, not a fix.

The problem: one message, several independent gates

Windows 11 has a published list of minimum hardware requirements. Every item on that list is checked separately. Any one of them can block the upgrade on its own.

Here is the documented list, straight from Microsoft's Windows 11 requirements article, with the way to read each one on a live device.

Documented requirementDocumented minimumHow you read it locally
Processor1 GHz or faster, two or more cores, on a compatible 64-bit processor or system on a chipGet-CimInstance Win32_Processor
Memory4 GB or greaterWin32_ComputerSystem.TotalPhysicalMemory
Storage64 GB or greater available disk spaceGet-Disk
System firmwareUEFI, Secure Boot capableGet-ComputerInfo -Property BiosFirmwareType and Confirm-SecureBootUEFI
TPMTrusted Platform Module version 2.0Win32_Tpm.SpecVersion, Get-Tpm, tpm.msc
Graphics cardCompatible with DirectX 12 or later, with a WDDM 2.0 driverdxdiag
DisplayHigh definition (720p), 9 inch or greater, 8 bits per colour channelDisplay settings

Two of those rows cause almost all of the confusion in an enterprise fleet, and both are worth spelling out before anything else.

The first is the processor row. "Compatible 64-bit processor" is not a speed test. It is a lookup against a list Microsoft publishes per Windows 11 release, on separate pages for AMD, Intel and Qualcomm parts. A four-core, 3 GHz, 64-bit chip can fail purely because its model is not on the list for the release you are deploying.

The second is the firmware row. It says "UEFI, Secure Boot capable". It does not say Secure Boot enabled. Microsoft's own Secure Boot support article is explicit: "the requirement to upgrade a Windows 10 device to Windows 11 is only that the PC be Secure Boot capable by having UEFI/BIOS enabled". A device with Secure Boot switched off in firmware still satisfies the gate, as long as the firmware supports Secure Boot at all.

Gotcha that costs money. Admins routinely read Confirm-SecureBootUEFI returning False as "not Secure Boot capable" and mark the device for replacement. False means capable but currently disabled. Only the error text Cmdlet not supported on this platform means the platform genuinely cannot do Secure Boot. Those two results look similar in a script that swallows exceptions, and they mean completely opposite things for your hardware budget.

So the real question is never "is this device eligible". It is "which gate failed". Windows answers that question in writing, and the next section explains who writes it.

Why it happens: the appraiser decides, not Setup

Two different components evaluate Windows 11 hardware requirements, at two different times, and they write to two different places. Confusing them is the root of most bad troubleshooting here.

The chain, in order. A scheduled task called Microsoft Compatibility Appraiser runs compattelrunner.exe, loading appraiser.dll. The appraiser inventories the device, compares it against a compatibility data file it refreshes from Microsoft, and writes its verdict into the registry under AppCompatFlags. Windows Update reads that verdict to decide whether to offer the upgrade at all. Only later, if an upgrade is actually attempted, does Windows Setup run its own separate system-requirement action and write an XML compatibility report.

That means a device can be blocked without Setup ever running. The message in Windows Update is the appraiser's answer, not Setup's.

What the appraiser actually is, in plain English. The compatibility appraiser is the part of Windows diagnostic data that answers one question: if this device tried to move to the next version of Windows, what would go wrong? It has existed since the Windows 10 upgrade era. It checks hardware, drivers and applications, then reduces the whole answer to a colour. Microsoft calls that colour the Upgrade Experience marker, or UpgEx. It documents four values: Red means the device cannot upgrade, Orange means functionality regresses after upgrade, Yellow means an app must be uninstalled first, and Green means none of those. Starting with Windows 11, Microsoft's documentation states that "the UpgEx marker evaluates against the Windows 11 minimum hardware requirements".

The useful part for us is that Microsoft publishes the specific reason codes. In the Configuration Manager readiness dashboard documentation, these conditions are listed as making a device Red for Windows 11.

Condition that failedDocumented value writtenWhat it actually means
System does not support TPM 2.0RedReason=TpmNo TPM, a 1.2 TPM, or a TPM turned off in firmware
System is not Secure Boot capableRedReason=UefiSecureBootLegacy BIOS, or UEFI firmware with no Secure Boot support
Less than 4 GB of RAMRedReason=MemoryMemory visible to the OS is under the floor
Fewer than two processor coresRedReason=CPUCore count gate
CPU does not support 1 GHz or higherRedReason=CPURated clock speed gate
CPU is not an approved Windows 11 CPU generationRedReason=CpuFmsModel is not on the published supported-processor list. FMS is family, model, stepping
Device is in S mode and not a Home SKURedReason=SModeStateEdition gate, not hardware
System drive smaller than 64 GBRedReason=SystemDriveSizeDisk capacity gate

Read that table again with an operations hat on. It is a complete decode of the message users see. If you can read RedReason off a device, you never have to guess which gate failed, and you never have to replace a laptop that only needed a firmware toggle.

Microsoft also documents a second, separate reason a device is not offered the upgrade, which is not a hardware gate at all: a safeguard hold. A safeguard hold is Microsoft blocking a specific feature update on devices with a known issue, such as a broken fingerprint sensor driver. The documented registry marker for it is GStatus, where 2 means no hold is in effect and 0 means a hold is in effect. A device can be perfectly eligible on hardware and still not be offered the upgrade because of a hold. Those two situations produce similar user complaints and completely different actions.

The binaries in the flow

Naming the actual files makes the chain concrete, and lets you confirm each one exists rather than trusting a diagram.

FileLocationRole in the flow
compattelrunner.exeC:\Windows\System32\The host process the appraiser scheduled task launches
appraiser.dllC:\Windows\System32\The appraiser itself. Loaded by compattelrunner with -m:appraiser.dll
aeinv.dllC:\Windows\System32\Application and device inventory used by the compatibility evaluation
invagent.dll, devinv.dll, generaltel.dllC:\Windows\System32\Inventory and general telemetry helpers loaded in the same runs
appraiser.sdb, Appraiser_Data.iniC:\Windows\Panther\The compatibility database and data file the verdict is evaluated against
APPRAISER_TelemetryBaseline_*.binC:\Windows\appcompat\appraiser\Per-target-OS baseline data, one file per evaluated release
MBR2GPT.EXEC:\Windows\System32\Not part of appraisal. Converts a system disk from MBR to GPT so it can boot UEFI

On the Windows 11 Enterprise device used to write this article, every file above was present except appraiser.sdb in System32, which lives in C:\Windows\Panther instead. That is worth knowing before you write a detection rule against a path you have not checked.

The appraiser answer can be stale. The verdict in the registry is whatever the last completed appraiser run concluded, against whatever compatibility data version it had at the time. If diagnostic data is turned off, or the scheduled task has not completed, the keys can be missing or old. Treat an absent value as "not evaluated", never as "eligible". The companion script for this post deliberately reports that case as INFO rather than PASS for exactly this reason.

How to verify: read each gate directly

There are four surfaces worth reading, in this order: the registry verdict, the live hardware state, the Setup logs, and the XML compatibility report. Start with the registry, because it is the fastest answer.

1. The registry verdict

Everything in this section lives under one parent key.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags
Subkey and valueWhat it holdsDocumented by Microsoft?
Appraiser\GWXGStatus2 = no safeguard hold in effect, 0 = a hold is in effectYes, in the safeguard holds article
TargetVersionUpgradeExperienceIndicators\GE<release>One subkey per target release the appraiser evaluated, for example GE24H2, GE25H2Yes, the key path and the release-suffix pattern
… → GStatus, GatedBlockId, GatedBlockReasonHold state, the eight-digit safeguard ID, and the reason stringYes, all three, with an example
… → UpgExThe upgrade experience colour: Green, Yellow, Orange, RedYes, the marker and its four values
… → RedReasonThe specific blocking reason, for example Tpm, UefiSecureBoot, CpuFmsYes, the values are listed for Windows 11
… → DestBuildNum, FailedPrereqs, DataVer, AppraiserVersionTarget build, prerequisite list, data and appraiser versionsNo. Observed on a live device, not documented
CompatMarkers, UpgradeExperienceIndicatorsOlder marker keys written by the same componentNo. Present on a live device, not documented

That last distinction matters more than it looks. The documented values are safe to build detection logic on. The undocumented ones can change in any monthly update without notice, so read them for diagnosis and do not gate a deployment on them.

Registry Editor
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\TargetVersionUpgradeExperienceIndicators\GE25H2
UpgEx          REG_SZ    Green
RedReason      REG_SZ    None
GStatus        REG_DWORD 0x00000002 (2)
GatedBlockId   REG_SZ    None
DestBuildNum   REG_DWORD 0x00006668 (26200)

A blocked device shows the same value names with different data, for example UpgEx of Red and RedReason of Tpm. That is the entire diagnosis in two values.

2. The live hardware state

The registry tells you what the appraiser concluded. The commands below tell you what is actually true right now, which is what you need before touching firmware. Each one reads only; none of them change anything.

PowerShell - run elevated
Get-CimInstance -Namespace 'root\CIMV2\Security\MicrosoftTpm' -ClassName Win32_Tpm | Select-Object SpecVersion, IsEnabled_InitialValue, IsActivated_InitialValue, ManufacturerIdTxt # SpecVersion is the ONLY documented place to read the TPM spec level from PowerShell. # Documented format is "major.minor, revision, errata". Healthy: 2.0, 0, 1.59 # Broken: 1.2, 2, 0 -- that is a TPM 1.2 chip and it fails the gate. # Note what is NOT here: Get-Tpm does not return a spec version at all. Get-Tpm | Select-Object TpmPresent, TpmReady, TpmEnabled, TpmActivated # Healthy: all four True. Broken: TpmPresent False, which usually means # "disabled in firmware", not "no chip fitted". Needs elevation or it errors. Confirm-SecureBootUEFI # True = Secure Boot capable AND enabled. Gate passes. # False = Secure Boot capable, currently disabled. Gate STILL passes. # "Cmdlet not supported on this platform." = no Secure Boot support or legacy BIOS. Gate fails. Get-ComputerInfo -Property BiosFirmwareType # Healthy: Uefi. Broken: Bios, meaning the machine booted legacy/CSM. Get-Disk | Select-Object Number, Size, PartitionStyle, BusType # Healthy: PartitionStyle GPT and Size at or above 64 GB. # Broken: PartitionStyle MBR - the disk cannot boot UEFI until it is converted.

Read the TPM chip's own words too. Run tpm.msc to open the TPM Management console. The TPM Manufacturer Information panel shows Specification Version, which is the same TCG value as Win32_Tpm.SpecVersion, in a form you can screenshot for a hardware vendor ticket. If the console says the TPM cannot be found while firmware claims it is enabled, you have a firmware or driver problem rather than a Windows 11 eligibility problem, and that is a different ticket entirely.

3. The Setup logs

If an upgrade was actually attempted, Setup left its own trail. Microsoft documents the log locations by phase; these are the ones that matter for hardware gates.

Log pathWhat it holdsSearch for
C:\$WINDOWS.~BT\Sources\Panther\setupact.logDown-level phase. The most important log, and where the requirement scan runsCompatSysRequirement, CHWReqChecker
C:\$WINDOWS.~BT\Sources\Panther\setuperr.logErrors only, same phaseyour result code, Shell application requested abort
C:\Windows\Panther\setupact.logPost-upgrade phase, after OOBECompatibility scan data is saved to
C:\Windows\Panther\CompatData_*.xmlThe compatibility report Setup wrote, one per scanBlockingType, HardwareType
C:\Windows\Logs\MoSetup\BlueBox.logCommunication between setup.exe and Windows UpdateMainHr, Cleanup
C:\$WINDOWS.~BT\Sources\Rollback\setupact.logRollback phase, for generic rollbacks0xC1900101

Here is what a healthy requirement scan looks like. These are genuine lines from C:\Windows\Panther\setupact.log on the device used for this article, with nothing invented.

setupact.log - real lines, requirement scan
Select-String -Path 'C:\Windows\Panther\setupact.log' -Pattern 'CompatSysRequirement|CHWReqChecker|Compatibility scan data' # Real output, trimmed. This is a healthy scan on an eligible device: Info MOUPG SetupCore: Registered COMPAT_SYSREQ action Info MOUPG CompatSysRequirement: Entering Execute Method Info MOUPG CDlpActionCompat::ExecuteSysReqScan: Enter Info CHWReqChecker: Checking hardware requirements from shared library API. Info MOUPG CDlpActionCompat::ExecuteSysReqScan: Exit Info Compatibility scan data is saved to C:\$WINDOWS.~BT\Sources\Panther\CompatData_...xml # Healthy: ExecuteSysReqScan enters and exits, and a CompatData file is written. # Broken: the scan runs, then setuperr.log carries a result code and setup aborts. # CHWReqChecker is the line that tells you the HARDWARE requirement check ran at all.

The XML that scan produces is the clearest artefact of the lot. Each check appears as a HardwareItem with a HardwareType name and a BlockingType. On this device the Secure Boot item reads exactly like this, again real and untouched apart from line wrapping:

<HardwareItem HardwareType="Setup_SecureBoot">
  <CompatibilityInfo BlockingType="None"/>
</HardwareItem>

BlockingType="None" is the healthy reading. A gate that failed carries a blocking value instead, and the HardwareType name tells you which check it was. Microsoft does not publish the full list of HardwareType names, so treat the names you find as observed rather than documented, and use them to point at a gate rather than as a contract.

4. Event Viewer: an honest N/A

Microsoft publishes no Event IDs for Windows 11 hardware-requirement appraisal. There is no event to look for that says "TPM gate failed". Saying so plainly is more useful than inventing one, so here is the substitute: the channels that exist, and what they are actually good for.

Event Viewer > Applications and Services Logs > Microsoft > Windows
ChannelState on a stock Windows 11 deviceWhat it is good for
Microsoft-Windows-Compat-Appraiser/OperationalEnabled, and empty on the test deviceExistence proves the appraiser has a channel. Do not expect eligibility verdicts here
Microsoft-Windows-Compat-Appraiser/AnalyticDisabled by defaultAnalytic channels are for tracing, not day-to-day diagnosis
SetupEnabled, populated by Microsoft-Windows-ServicingServicing and update install history, not hardware gates
Microsoft-Windows-SetupPlatform/AnalyticPresentSetup platform tracing during an actual upgrade attempt

Confirm this yourself rather than trusting the table, with wevtutil el piped into a filter, then Get-WinEvent -ListLog on any channel you care about to see whether it is enabled and how many records it holds. If a channel is enabled with zero records, the answer to "why is there nothing in Event Viewer" is simply that nothing writes there for this scenario.

5. Services and scheduled tasks

The appraiser is driven by a scheduled task, and its data upload depends on one service.

ItemNameExpected state
Scheduled task path\Microsoft\Windows\Application Experience\Contains the compatibility appraiser task plus PcaPatchDbTask, SdbinstMergeDbTask, StartupAppTask
Appraiser task action%windir%\system32\compattelrunner.exe -m:appraiser.dll -f:DoScheduledTelemetryRunReady. This is the exact action string read from the live task
Service (short name)DiagTrackRunning. Display name: Connected User Experiences and Telemetry

Read them with Get-ScheduledTask -TaskPath '\Microsoft\Windows\Application Experience\' and Get-Service DiagTrack. On the test device the task name is Microsoft Compatibility Appraiser Exp, which is a reminder that task names vary by build and that you should enumerate the path rather than hard-code a task name.

The fix: act on the gate that actually failed

Now that you can name the failing gate, each one has a different answer. Only one of them is "buy new hardware".

Failing gateWhat actually fixes itReboot or reinstall?
TPM absent or disabledEnable it in firmware. Intel platforms usually call it PTT, AMD platforms fTPMFirmware change plus reboot
TPM is 1.2Some platforms offer a firmware switch from 1.2 to 2.0. It clears the TPM, so suspend BitLocker and have your recovery key firstFirmware change plus reboot
Secure Boot reported not supportedCheck whether the machine is booted in CSM/legacy mode first. If the firmware genuinely has no Secure Boot support, this gate cannot be fixed in softwareFirmware change, possibly disk conversion
Legacy BIOS boot with an MBR diskMBR2GPT.EXE /validate, then convert, then switch firmware to UEFIDisk conversion plus firmware change
Memory below 4 GBAdd memory if the platform allows itHardware change
System disk below 64 GBReplace the disk, or redeploy to a larger oneHardware change
RedReason=CpuFmsNothing. The model is not on the list. This is the refresh caseDevice replacement
GStatus=0 (safeguard hold)Not a hardware problem. Look up GatedBlockId on Windows release health and wait for the fix, or opt out for validation onlyNeither

Getting into firmware without a boot-key race

Microsoft documents a route into UEFI firmware settings from inside Windows, which is far more reliable than telling a user to hammer F2 at boot.

SettingsSystemRecoveryAdvanced startup: Restart nowTroubleshootAdvanced optionsUEFI Firmware Settings

From there, the two settings to look for are the TPM (PTT or fTPM) and the boot mode, changing it from Legacy BIOS or CSM to UEFI. Microsoft's Secure Boot article calls out that same boot-mode change explicitly.

Converting an MBR system disk

If the disk is MBR, switching firmware to UEFI on its own produces an unbootable machine. Convert first. MBR2GPT.EXE ships in Windows\System32 on every supported Windows version and can validate without changing anything.

Destructive-risk warning. MBR2GPT /convert repartitions the system disk. Microsoft's own tool output says "If conversion is successful the disk can only be booted in GPT mode. These changes cannot be undone!" and the documentation states that after conversion "the firmware must be reconfigured to boot in UEFI mode". It also warns that a BitLocker-encrypted volume must have protection suspended first, and that existing protectors then need to be deleted and recreated. Run /validate on a pilot device, confirm return code 0, and have a tested recovery path before you touch a fleet. Return code 7 means the disk layout does not meet requirements, and 6 means a volume is encrypted.

The bypass question, answered honestly

Two registry approaches circulate for installing Windows 11 on ineligible hardware. Being precise about their documentation status matters more here than anywhere else in this article, because the consequence is your support position.

HKEY_LOCAL_MACHINE\SYSTEM\Setup
Subkey and valueClaimed effectDocumentation status
MoSetupAllowUpgradesWithUnsupportedTPMOrCPU (REG_DWORD)Allows an in-place upgrade to proceed with an unsupported CPU or TPMCirculated everywhere, including Microsoft Q&A threads, which are user-generated content. I could not verify it on any current Microsoft-official documentation page. Treat as undocumented
LabConfigBypassTPMCheck, BypassSecureBootCheck and similarSkips individual checks during a clean install started from mediaUndocumented. No Microsoft documentation page defines these values

Two observations from the live device, offered as facts rather than advice. The MoSetup key exists by default on this Windows 11 Enterprise build, and it is empty, which contradicts the common instruction that you must create the key yourself. And LabConfig does not exist on a running OS at all, because it is an install-time construct rather than something a managed device carries.

What Microsoft actually says about installing on ineligible hardware. This is the documented consequence, and it is not ambiguous. The support article states that a device not meeting the requirements "won't receive support from Microsoft", and that such devices are "not guaranteed to receive updates, including but not limited to security updates". The text presented at install time goes further: "If you proceed with installing Windows 11, your PC will no longer be supported and won't be entitled to receive updates. Damages to your PC due to lack of compatibility aren't covered under the manufacturer warranty." Microsoft also recommends rolling back to Windows 10 immediately if Windows 11 was installed on a device that does not meet the requirements. In a managed estate, that is a decision for whoever owns the risk register, not for whoever is closing the ticket. This article does not recommend it, and the companion script deliberately cannot write any of these values.

Group Policy: no policy makes a device eligible

Say this plainly, because it saves hours of searching: there is no Group Policy setting, no CSP and no Intune configuration profile that makes an ineligible device eligible for Windows 11. Eligibility is a hardware fact evaluated on the device. Policy controls what is offered, not what is possible.

Two policies genuinely matter around this problem, and both are in the same ADMX file, WindowsUpdate.admx.

To reach the safeguard policy in the Group Policy Editor:

  1. Run gpedit.msc on the device, or open your domain GPO in the Group Policy Management Editor.
  2. Expand Computer Configuration.
  3. Expand Administrative Templates.
  4. Expand Windows Components.
  5. Expand Windows Update.
  6. Select Manage updates offered from Windows Update.
  7. Open Disable safeguards for Feature Updates and set it to Enabled only for validation devices.
  8. In the same folder, Select the target Feature Update version controls which release is offered, using the product name and version fields.
Computer ConfigurationAdministrative TemplatesWindows ComponentsWindows UpdateManage updates offered from Windows Update

To make the appraiser's verdict visible to your reporting at all, diagnostic data has to be on. That is a separate policy:

  1. Open the Group Policy Management Console or gpedit.msc.
  2. Expand Computer Configuration, then Administrative Templates, then Windows Components.
  3. Select Data Collection and Preview Builds.
  4. Open Allow diagnostic data, which is named Allow telemetry on Windows 10 version 1809 and earlier.
  5. Choose the level. The documented values are 0 for diagnostic data off, 1 for Required, 2 for Enhanced and 3 for Optional.
  6. Set at least Required if you want readiness reporting to work. Microsoft's Configuration Manager readiness dashboard prerequisites state that telemetry should be enabled at basic level and hardware inventory enabled on clients.

Intune: the same reality, plus a report worth using

The two Windows Update policies above exist in the Settings Catalog and as CSPs. The safeguard one is ./Device/Vendor/MSFT/Policy/Config/Update/DisableWUfBSafeguards, where 0 is the default and means safeguards are enabled, and 1 means upgrades deploy without blocking on safeguards. Diagnostic data is System/AllowTelemetry.

To create that profile:

  1. Sign in to the Microsoft Intune admin center.
  2. Go to Devices, then Configuration.
  3. Select Create, then New policy.
  4. Platform: Windows 10 and later. Profile type: Settings catalog.
  5. Select Add settings and search for Disable WUfB Safeguards, or for Allow Telemetry for the diagnostic data setting.
  6. Set the value, assign the profile to a small validation group only, and save.
intune.microsoft.comDevicesConfigurationCreateSettings catalog

The genuinely useful Intune surface for this problem is not a policy at all. It is a report. Endpoint analytics has a Work from anywhere report whose Windows tab gives a device-by-device view of Windows 11 hardware readiness. The Windows 11 readiness status column shows Capable, Not capable, Upgraded or Unknown, and the Windows 11 readiness reason column names the specific hardware requirements that are not met. Selecting Windows on the Overview page shows a chart of the top hardware blockers across the tenant.

intune.microsoft.comReportsEndpoint analyticsWork from anywhereWindows

That chart is the difference between "we need a hardware refresh" and "four hundred devices need a firmware toggle". Microsoft's documentation also notes that devices showing Unknown are usually inactive rather than broken, so check last check-in time before you treat them as a problem.

Windows Update for Business already protects you here. Microsoft's planning guidance states that organisations using Windows Update client policies get the benefit of "ensuring that devices that don't meet the minimum hardware requirements aren't automatically offered the Windows 11 upgrade", plus more insight into which safeguard holds are blocking individual devices. So an ineligible managed device is not going to be surprised into an upgrade. That also means the absence of an offer is expected behaviour, not a fault to chase.

Defender and security policy: N/A, and why

This topic does not touch Microsoft Defender, attack surface reduction, exploit protection, WDAC or the firewall. No Endpoint Security profile influences hardware eligibility, and no ASR rule blocks an upgrade offer. The overlap people expect is TPM and Secure Boot, but those are firmware facts read by the appraiser, not Defender features. Saying N/A here is more useful than inventing a connection, and if a colleague insists Defender is involved, the RedReason value on the device will settle it.

Proof it worked: a real read-only gate report

The companion script for this article, Get-Windows11ReadinessGate.ps1, evaluates every documented gate separately and prints the measured value beside the requirement. It writes nothing. It cannot set a bypass value, cannot touch firmware and cannot change a service.

The output below is a genuine run on the Windows 11 Enterprise device used to write this article, with only the device name replaced. It exited with code 0, and the same script parsed with zero errors on Windows PowerShell 5.1 and PowerShell 7.6 and produced the same verdicts on both.

PowerShell - real run, elevated
PS C:\> .\Get-Windows11ReadinessGate.ps1 Windows 11 hardware gate report Device: CONTOSO-1234 Generated: 2026-08-21 23:55:42 ------------------------------------------------------------------------------ [PASS ] CPU is 64-bit measured : AddressWidth=64, DataWidth=64 [PASS ] CPU core count measured : 8 physical core(s) [PASS ] CPU clock speed measured : 3301 MHz (MaxClockSpeed) [PASS ] CPU instruction-set features measured : SSE2=True, NX/DEP=True, CMPXCHG16B=True [MANUAL ] CPU model on the supported list measured : AMD Ryzen 7 PRO 7840U [AMD64 Family 25 Model 116 Stepping 1] [PASS ] TPM present measured : Win32_Tpm instance returned, ManufacturerIdTxt=STM [PASS ] TPM spec version measured : SpecVersion=2.0, 0, 1.59 [PASS ] TPM enabled and activated measured : IsEnabled=True, IsActivated=True, Get-Tpm TpmReady=True [PASS ] Firmware type is UEFI measured : BiosFirmwareType=Uefi [PASS ] Secure Boot capable measured : Confirm-SecureBootUEFI returned True [PASS ] Memory measured : TotalPhysicalMemory=30.67 GB, installed modules=32 GB [PASS ] System disk size measured : disk 0 = 953.87 GB, bus NVMe [PASS ] System disk partition style measured : PartitionStyle=GPT [PASS ] Safeguard hold (GStatus) measured : GStatus=2 [PASS ] Appraiser verdict: GE25H2 measured : UpgEx=Green; RedReason=None; GStatus=2; DestBuildNum=26200 ------------------------------------------------------------------------------ Gates evaluated : 18 Failed gates : 0 Read failures : 0 # Healthy: every gate PASS, and CPU model reported as MANUAL because no local # supported-model list exists to compare against. That is honesty, not a bug. # Broken would read, for example: [FAIL] TPM spec version, SpecVersion=1.2, 2, 0 # Memory line proves the reserved-memory trap: 32 GB installed reads as 30.67 GB.

Three design decisions in that script are worth borrowing for any readiness check you write yourself.

It reports the CPU supported-model gate as MANUAL, not PASS. There is no local database of supported processors to compare against, so claiming a pass would be a guess dressed as a result. It prints the family, model and stepping so you can compare against the published list for the release you are deploying.

It distinguishes a read failure from a genuine absence. If Win32_Tpm returns nothing, the script asks Get-Tpm for a second opinion. Only when that confirms TpmPresent=False does it record a real FAIL. Otherwise the gate is READ-FAILED and the whole run exits 1, because a device wrongly reported as having no TPM is how unnecessary hardware orders get raised.

It treats Confirm-SecureBootUEFI returning False as a pass, with a note explaining why, because the documented requirement is capable and not enabled.

Deploying it read-only at scale. Run it as an Intune platform script or as the detection half of a remediation and collect the -AsJson output. The exit codes are designed for that: 0 means every gate passed, 2 means a gate genuinely failed, and 1 means a read failed and the result should not be trusted. Never collapse 1 and 2 into one bucket, because one of them is a device problem and the other is a data-quality problem.

References

No community or MVP deep-dive is cited here. I looked for one specifically on reading the Windows 11 hardware gate and could not verify a match on topic, and a fabricated citation is worse than an omitted table.

PowerShell — companion script

Download it from Imran76Awan/Windows-11-Scripts — no sign-in required. It is read-only: it reports and never changes a device or anything in Intune. Validate it in your own environment before relying on the output.

Get-Windows11ReadinessGate.ps1 — Reads every documented Windows 11 minimum-hardware gate on the local device and
View all scripts on GitHub
Was this post helpful?
React below — no account needed
Share this post
LinkedIn X / Twitter Reddit Bluesky

More from EndpointWeekly

Windows 11
A Safeguard Hold Is Blocking Your Feature Update: Finding Which…
One device in the ring never gets the feature update, and Windows says nothing. That is a…
Windows 11
BitLocker asked for the recovery key after a firmware update:…
A BitLocker TPM protector seals the volume master key to a set of Measured Boot values…
Windows 11
Attack Surface Reduction rules broke a line-of-business app:…
An ASR rule in Block mode kills an app and tells you nothing but a GUID. Here is the…