Stuck" on 23H2? How to Break the Version Lock Policy

Windows Update stuck? How to Break the Version Lock Policy | Powershell

Are you running a compatible PC, but Windows Update insists you are “up to date” on version 23H2? Even if you’ve cleared hardware blocks, your system might be under a Target Version Policy.

This isn’t a bug or a hardware failure—it is a specific “stay put” instruction in your Windows Registry. Whether it was set by a previous optimization tool, a “debloater” script, or an IT administrator, this policy tells Windows to ignore any version higher than 23H2.

Here is how to identify the lock and break it using the Registry and PowerShell.


Phase 1: Identifying the Policy Lock

Before deleting anything, let’s confirm if a policy is actually the culprit.

  1. Press Win + R, type regedit, and hit Enter.
  2. Navigate to the following path: HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate
  3. Check for these two specific values:
    • TargetReleaseVersion: If this is set to 1, a lock is active.
    • TargetReleaseVersionInfo: If this says 23H2, Windows is forbidden from seeing 24H2.

Phase 2: The “Clean Slate” Resolution

In the Policies section of your registry, there are no “default” values that Windows needs to function. This folder is meant to be empty for home users. To fix the issue, we need to wipe these overrides.

Method A: The Surgical PowerShell Script

This is the safest and fastest way. It targets the restriction folder, clears the blocks, and restarts the update engine.

How to use: Copy the code below, paste it into Notepad, save it as Unlock24H2.ps1, then right-click the file and select Run with PowerShell.

PowerShell: Reset Update Policies
# Check for Windows Update Policy overrides
$registryPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate"

if (Test-Path $registryPath) {
    Write-Host "Custom update policies detected. Resetting to factory defaults..." -ForegroundColor Cyan
    
    # Remove all custom restriction values
    Get-Item $registryPath | Select-Object -ExpandProperty Property | ForEach-Object { 
        Remove-ItemProperty -Path $registryPath -Name $_ -Force 
    }

    # Clean the 'AU' (Automatic Updates) sub-folder
    $auPath = "$registryPath\AU"
    if (Test-Path $auPath) {
        Get-Item $auPath | Select-Object -ExpandProperty Property | ForEach-Object { 
            Remove-ItemProperty -Path $auPath -Name $_ -Force 
        }
    }
    Write-Host "Success: Policies cleared." -ForegroundColor Green
} else {
    Write-Host "No policy blocks found." -ForegroundColor Yellow
}

# Restart the Update Service to apply changes
Restart-Service -Name wuauserv -Force
Write-Host "Windows Update Service restarted. Check for updates now!" -ForegroundColor White

Method B: Manual Registry Deletion

If you prefer doing it by hand:

  1. Go back to the WindowsUpdate key in Regedit.
  2. Right-click the WindowsUpdate folder in the left sidebar.
  3. Select Delete.
  4. Don’t worry: Windows will recreate this folder automatically the next time you check for updates, but it will be empty (default).

Phase 3: Triggering the Update

After running the script or deleting the keys, you must tell Windows to look again:

  1. Open Settings > Windows Update.
  2. Click Check for Updates.
  3. If the policy was your only blocker, Windows 11, version 24H2 should appear immediately as an “Optional Feature Update” or a mandatory download.

Why did this happen?

Most users find themselves in this “Policy Trap” because of:

  • Privacy Tools: Many “O&O ShutUp10” or “WPD” style tools set these keys to prevent “unwanted” major upgrades.
  • Work Accounts: If you have a “Work or School” account linked in Settings, your organization may be enforcing 23H2 stability.

Note: If you are on a corporate laptop, these settings will reappear shortly after you delete them. You will need to contact your IT admin to authorize the 24H2 upgrade.

Force a Re-Scan for the Newest Version

If the device doesn’t even have a folder for GE24H2 (the 24H2 code name) in that registry path, it means the compatibility appraiser hasn’t even tried to check for the latest version yet. Run this as Administrator to force it to look for the latest version:

DOS

CMD : Re-Scan for the Newest Version
CompatTelRunner.exe -m:appraiser.dll -f:DoScheduledTelemetryRun

Note: This can take 5–10 minutes to finish