When Configuration Manager (still widely called SCCM or MECM) deploys updates that never install, the console rarely tells you why. The answer is almost always in a handful of client logs. In this post I'll follow an update through the client — scan source, scan, evaluation, download and installation — and show what each log should say, the errors you'll actually meet and how to fix them.
Errors this guide fixes
Scan failed with error = 0x80244022WUAHandler.logGroup policy settings were overwritten by a higher authority (Domain Controller)WUAHandler.logNo current service window available to run updates assignmentUpdatesDeployment.log0x80072EE2WUAHandler.log / WindowsUpdate.log+1 more guide0x8024401CWUAHandler.log / WindowsUpdate.log0x8024402CWUAHandler.log / WindowsUpdate.log0x80244021WUAHandler.log / WindowsUpdate.log0x80072F0CWUAHandler.log / WindowsUpdate.log
Symptoms#
- Software Center shows no updates, even though the device is in the target collection.
- In Monitoring › Deployments, devices sit in Unknown or Error, or stay In progress for days.
WUAHandler.logrepeatsScan failed with error = 0x80244022(or another code) at every scan cycle.- Updates download but wait indefinitely, or install outside the hours you expected.
Why it happens#
The client doesn't scan by itself. It points the Windows Update Agent (WUA) at the WSUS server on your software update point (SUP), lets WUA scan, and then enforces your deployments against the result. A break anywhere in that chain stops everything after it. All of these logs live in C:\Windows\CCM\Logs:
| Stage | Log | What "good" looks like |
|---|---|---|
| Scan source | ScanAgent.log, LocationServices.log | Calling back with the following WSUS locations, then your SUP URL |
| Scan | WUAHandler.log | Successfully completed scan. |
| Compliance state | UpdatesStore.log | Successfully raised state message for update (...) with state (Missing). |
| Deployment evaluation | UpdatesDeployment.log | Making updates available for assignment |
| Download | UpdatesHandler.log, CAS.log, ContentTransferManager.log, DataTransferService.log | Content found on a distribution point and cached |
| Timing | ServiceWindowManager.log | A maintenance window long enough for the updates |
The usual culprits: the client can't reach WSUS (ports, proxy, an overloaded WSUS application pool), a domain GPO points WUA at a different server, a failed SUP synchronisation, content missing from the client's boundary group, or maintenance windows shorter than the updates' maximum run time.
How to fix it#
1. Confirm the client has a scan source#
Trigger a scan and a deployment evaluation, then read ScanAgent.log and LocationServices.log:
# Scan by Update Source (software updates scan cycle)
Invoke-CimMethod -Namespace root\ccm -ClassName SMS_Client -MethodName TriggerSchedule -Arguments @{sScheduleID='{00000000-0000-0000-0000-000000000113}'}
# Software Updates Assignments Evaluation Cycle
Invoke-CimMethod -Namespace root\ccm -ClassName SMS_Client -MethodName TriggerSchedule -Arguments @{sScheduleID='{00000000-0000-0000-0000-000000000108}'}If no WSUS location comes back, or WUAHandler.log is never created, the client has no scan policy or the management point returned an empty location. Check CcmMessaging.log for communication errors, then Monitoring › Software Update Point Synchronization Status: a failed or stale sync is a classic cause of an empty reply.
2. Read the scan result in WUAHandler.log#
Async searching of updates using WUAgent started.
Async searching completed.
OnSearchComplete - Failed to end search job. Error = 0x80244022.
Scan failed with error = 0x80244022.WUAHandler.log only relays what WUA reported, so the detail is in the Windows Update log. On Windows 10 and 11, run Get-WindowsUpdateLog to produce a readable WindowsUpdate.log. The codes you'll see most:
| Error | Meaning | Check |
|---|---|---|
0x80072EE2, 0x8024401C | Timeout talking to WSUS | Firewall, WSUS ports (8530/8531 or 80/443), name resolution |
0x80244022 | HTTP 503 from WSUS | WsusPool in IIS on the SUP stopped or overloaded |
0x80244021, 0x8024401B, 0x8024402C | Proxy problems (502, 407, name not resolved) | WinHTTP proxy and bypass list |
0x80072F0C | Client certificate required | WSUS SSL: virtual directories must ignore client certificates |
0x80245003, 0x80248011 | Missing or corrupt WUA components | Stop wuauserv, rename C:\Windows\SoftwareDistribution, restart, rescan |
3. Test WSUS from the client#
Test-NetConnection sup01.contoso.com -Port 8530
Invoke-WebRequest http://sup01.contoso.com:8530/ClientWebService/wusserverversion.xml -UseBasicParsing
Invoke-WebRequest http://sup01.contoso.com:8530/SimpleAuthWebService/SimpleAuth.asmx -UseBasicParsing
netsh winhttp show proxyIf these succeed but the scan still fails, read the IIS logs on the SUP to see whether WSUS returned the error or something in between (proxy, firewall) did.
4. Remove Group Policy conflicts#
The client writes the SUP URL into local policy. A domain GPO that sets Specify intranet Microsoft update service location to anything else wins, and WUAHandler.log tells you:
Group policy settings were overwritten by a higher authority (Domain Controller) to: Server http://server and Policy ENABLEDRun gpresult /h gp.html to find the GPO, then remove it from Configuration Manager clients (or make it identical, port included). Confirm:
Get-ItemProperty 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate' | Select-Object WUServer, WUStatusServer
Get-ItemProperty 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU' | Select-Object UseWUServerWUServer and WUStatusServer should both show your SUP URL with its port, and UseWUServer should be 1.
5. Follow evaluation and download#
Add the Deployment Unique ID column in the console and search for it in UpdatesDeployment.log. Healthy evaluation shows Assignment {...} has total CI = n, then Making updates available for assignment and progress lines with Status = ciStateDownloading. If downloads stall, read CAS.log, ContentTransferManager.log and DataTransferService.log, and confirm the deployment package is on a distribution point in the client's boundary group (or that fallback is allowed).
6. Check maintenance windows and maximum run time#
Search ServiceWindowManager.log for Refreshing Service Windows. Upper-case IDs are collection maintenance windows; lower-case IDs are business-hours windows from Software Center. If UpdatesDeployment.log reports No current service window available to run updates assignment, the window is too short or doesn't apply to updates:
- An update only starts if the remaining window can fit its Maximum Run Time (update properties in Software Library › Software Updates › All Software Updates).
- A window lasts 24 hours at most, and its Apply this schedule to value must be All deployments or Software updates.
- If a device has both kinds, updates use only the Software updates window unless you enable the Software Updates client setting that allows installation in "All deployments" windows.
Verify the fix#
- Run the scan cycle again.
WUAHandler.logshould end withSuccessfully completed scan. UpdatesStore.lograises state messages for missing updates; the client forwards them on the state message cycle (every 15 minutes by default).- Software Center lists the required updates, and
UpdatesDeployment.logshows them moving through download and installation. - In Monitoring › Deployments, right-click the deployment, choose Run Summarization and refresh: the device should leave Unknown for In progress or Compliant.
Prevent it next time#
- Keep WSUS lean and its application pool healthy; a bloated database is a common source of
0x80244022. See software update point and WSUS maintenance. - Never target Configuration Manager clients with a GPO that sets a WSUS server.
- Alert on SUP synchronisation failures: clients can't scan against content the site doesn't have.
- Size maintenance windows for the slowest update and patch a pilot ring first — see ring-based automatic deployment rules for Patch Tuesday.

