A Group Policy setting is not applying and gpresult does not explain why
The policy is linked and enabled, and something in the processing rules is excluding this user or machine.
What you see
A setting configured in a GPO simply does not appear on the client. gpupdate /force reports success.
What is actually wrong
Security filtering, a WMI filter, the setting being in the wrong half of the policy, block inheritance, or loopback processing on the target machine.
Codes and articles
Fixes (2)
Check the user side of processing
A user setting.
Get the full report as the affected user, not as an administrator.
gpresult /h $env:USERPROFILE\Desktop\gpo.html /fStart-Process $env:USERPROFILE\Desktop\gpo.html
Look at the Denied GPOs section, which states the reason for each — Security, WMI Filter, or Not Applied (Empty).
This section answers the question directly and is below the fold, so it is routinely missed. "Denied (Security)" means the user is not in the security filtering; "Empty" means the half of the policy being used has nothing configured in it.
Check the user object is in an OU the policy is linked to. A user in a different OU from their computer is the most common cause of a user policy not applying.
Get-ADUser jbloggs | Select-Object DistinguishedNameGet-GPInheritance -Target 'OU=Users,OU=Site,DC=example,DC=local' | Select-Object -ExpandProperty InheritedGpoLinks
Check security filtering includes the user, and that Authenticated Users still has read permission — a common hardening change removes it and silently breaks the policy.
Get-GPPermission -Name 'My Policy' -All | Format-Table Trustee,PermissionAfter the security update that requires it, a GPO where Authenticated Users has been removed entirely does not apply to anyone, even accounts explicitly listed in the filtering. The computer account needs read access for the policy to be retrieved at all.
If the setting must apply based on the machine rather than the user, enable loopback processing on that machine's policy.
gpupdate /forcegpresult /r /scope:user
Check the computer side and the WMI filter
A computer setting.
Run the report for the computer scope.
gpresult /r /scope:computergpresult /h C:\gpo-computer.html /f /scope:computer
Test any WMI filter directly on the client — a filter that returns nothing silently excludes the policy.
Get-CimInstance -Query "SELECT * FROM Win32_OperatingSystem WHERE ProductType = '3'"Running the filter's own query on the client gives an immediate yes or no. A filter that was correct when written and no longer matches — because the OS version moved on — is a very common cause.
Check for block inheritance and enforcement on the OU chain.
Get-GPInheritance -Target 'OU=Servers,DC=example,DC=local' | Format-List GpoInheritanceBlocked,InheritedGpoLinksCheck the client can reach SYSVOL to read the policy files.
Test-Path "\\$env:USERDNSDOMAIN\SYSVOL\$env:USERDNSDOMAIN\Policies"Get-WinEvent -LogName 'Microsoft-Windows-GroupPolicy/Operational' -MaxEvents 30 | Format-Table TimeCreated,Id,Message -Wrap
Remember that a computer policy applies at boot. A machine that has not restarted since the policy was created will not have it.
gpupdate /force /bootgpresult /r /scope:computer
Where this stops. This write-up was written and checked by hand. It says what each step changes, how to confirm it worked and how to reverse it, and anything destructive is flagged before you reach it. If it does not match what your machine is doing, search the Support Centre for the exact code or message — and when something needs a person, get in touch.