Why Wi-Fi Adapters Sleep Through Support Calls
Power-state telemetry detects sleeping Wi-Fi adapters and applies targeted Intune remediation before intermittent drops reach the service desk.

Operational brief
What you will achieve
Automate away manual IT friction using modern Zero-Trust principles and scripting.
Target Tier
L1 - L3 support
Applicable to all tiers of the service desk.
Time to set aside
About 25 minutes
Includes configuration, validation and deployment.
Tutorial navigation
#The Old Way: Chasing Ghosts in the Wi-Fi Logs
Every helpdesk queue has a repeat offender: the intermittent Wi-Fi drop ticket. A user reports their connection ‘keeps cutting out’ every 20 minutes or so. The old way of handling this is painfully manual. L1 asks the user to reboot the router. L2 remotes in, runs ipconfig /all, checks signal strength, maybe reinstalls the driver. The user closes the laptop lid, the session ends, and three days later the same user opens an identical ticket with a slightly different subject line. Nobody ever looks at the actual root cause because it only happens when the technician isn’t watching.
The root cause, in the overwhelming majority of these cases, is not the router, the access point, or the driver version. It’s the NIC power management setting silently throttling the radio to save battery. Windows, by default, allows the operating system to power down the wireless adapter during idle periods to extend battery life. On roaming laptops moving between access points, or on adapters with buggy power-save firmware, this manifests as exactly the symptom the user describes: random, repeatable drops that vanish the moment someone is actively troubleshooting because active troubleshooting keeps the adapter awake.
Historically, this problem was solved by escalating to L3, capturing a WireShark trace, and eventually finding the setting buried three menus deep in Device Manager. That is a 45-minute engagement for a five-second registry change. We do not do that any more.
#The New Way: Catching the Drop Before the User Notices
Modern Digital Experience (DEX) platforms already collect the telemetry we need. NIC power state changes, disconnect/reconnect events, and signal-to-noise data are sitting in your DEX agent’s local database whether you query them or not. The fix is to stop waiting for the user to notice and complain, and instead build a detection rule that flags the pattern, triggers an automated remediation script, validates the fix, and closes the loop without a single human touching a keyboard.
The engineering goal here is specific: eliminate the ticket category entirely, not just make it faster to resolve. We do this in four stages: detect, remediate, validate, and suppress.
#Step 1: Building the Detection Query
If you’re running Nexthink, Lakeside, or a similar DEX tool, you can query endpoint telemetry directly rather than relying on user-submitted tickets. The logic is: flag any device that has recorded more than three Wi-Fi disconnect events within a rolling 30-minute window, where the disconnect correlates with an idle-to-active power state transition.
1-- NQL-style detection query (Nexthink Query Language)
2compute count(wifi_disconnect_events) as drop_count
3from device_network_events
4where event_type = 'wifi_disconnected'
5 and correlated_power_event = 'adapter_idle_powerdown'
6and timestamp within last 30 minutes
7group by device_id
8having drop_count >= 3If you don’t have a dedicated DEX platform, the same logic can run as a lightweight scheduled task using Windows Event Log queries against Event ID 8003 (network disconnect) and Event ID 27 (power state change) from the Kernel-Power provider.
1Get-WinEvent -FilterHashtable @{
2 LogName = 'System'
3 ProviderName = 'Microsoft-Windows-Kernel-Power'
4 Id = 27
5} -MaxEvents 50 |
6Where-Object { $_.TimeCreated -gt (Get-Date).AddMinutes(-30) } |
7Measure-Object |
8Select-Object -ExpandProperty Count#Step 2: The Proactive Remediation Script
Once a device trips the threshold, it should never generate an incident ticket. Instead it should generate a remediation event. In Microsoft Intune, this is a textbook Proactive Remediation pairing: a detection script and a remediation script, both running silently under the SYSTEM context on a recurring schedule (every four hours is usually sufficient).
The detection script checks whether the wireless adapter still has power-saving enabled:
1$adapter = Get-NetAdapterPowerManagement | Where-Object { $_.AllowComputerToTurnOffDevice -eq 'Enabled' }
2
3if ($adapter) {
4 Write-Output "NonCompliant: Power saving still enabled on $($adapter.Name)"
5 exit 1
6} else {
7 Write-Output "Compliant"
8 exit 0
9}If the detection script returns exit code 1, Intune automatically triggers the remediation script on that device, no ticket, no technician, no user interaction:
1$adapters = Get-NetAdapter | Where-Object { $_.MediaType -eq '802.11' }
2
3foreach ($adapter in $adapters) {
4 Set-NetAdapterPowerManagement -Name $adapter.Name -AllowComputerToTurnOffDevice Disabled
5 Write-Output "Disabled power saving on $($adapter.Name)"
6}
7
8# Registry fallback for adapters that ignore the cmdlet
9$path = "HKLM:SYSTEMCurrentControlSetControlClass{4d36e972-e325-11ce-bfc1-08002be10318}"
10Get-ChildItem $path | ForEach-Object {
11 Set-ItemProperty -Path $_.PsPath -Name "PnPCapabilities" -Value 24 -ErrorAction SilentlyContinue
12}
13
14Restart-NetAdapter -Name $adapters.Name -Confirm:$false
15exit 0Value 24 in PnPCapabilities tells Windows to never allow the device to be powered down to save power, which covers adapters where the standard PowerShell cmdlet is unreliable due to OEM driver quirks (common on Killer and Realtek chipsets).
#Step 3: Wiring the Webhook for Zero-Touch Logging
You still want visibility into how often this fires, because a spike across an office floor might indicate a firmware issue with a specific access point rather than a per-device power setting. Rather than raising an incident in ServiceNow, have the remediation script post a lightweight event record to a logging endpoint. This keeps the CMDB informed without polluting the ticket queue with noise.
1{
2 "event_type": "proactive_remediation",
3 "category": "network_power_management",
4 "device_id": "$env:COMPUTERNAME",
5 "user": "$env:USERNAME",
6 "remediation_applied": "disable_nic_power_saving",
7 "trigger_count_30min": 4,
8 "timestamp": "2024-05-14T09:32:00Z",
9 "ticket_suppressed": true
10}This payload gets sent via a simple Invoke-RestMethod call at the end of the remediation script, hitting an internal logging webhook rather than the incident creation API.
1$body = @{
2 event_type = "proactive_remediation"
3 category = "network_power_management"
4 device_id = $env:COMPUTERNAME
5 user = $env:USERNAME
6 remediation_applied = "disable_nic_power_saving"
7 ticket_suppressed = $true
8} | ConvertTo-Json
9
10Invoke-RestMethod -Uri "https://itops.internal/api/v1/dex-events" -Method Post -Body $body -ContentType "application/json"#Step 4: Validation Loop and Ticket Suppression Logic
The remediation script running once is not the end of the engineering work. You need a validation pass to confirm the fix actually holds, because some Group Policy Objects re-enable power saving on every login (a common conflict when a legacy battery-life GPO fights your remediation). Schedule a second detection check 24 hours later. If the setting has reverted, that’s your signal to escalate from ‘automated fix’ to ‘policy conflict investigation’ — a real ticket, but now pre-diagnosed with the exact cause already logged.
1# Validation check - run 24 hours after remediation
2$stillEnabled = Get-NetAdapterPowerManagement | Where-Object { $_.AllowComputerToTurnOffDevice -eq 'Enabled' }
3
4if ($stillEnabled) {
5 # GPO is likely reverting the setting - escalate with context, don't just retry blindly
6 $ticketBody = @{
7 summary = "NIC power setting reverted post-remediation - likely GPO conflict"
8 device = $env:COMPUTERNAME
9 priority = "P3"
10 auto_diagnosis = "GPO_conflict_suspected"
11 } | ConvertTo-Json
12 Invoke-RestMethod -Uri "https://itops.internal/api/v1/tickets" -Method Post -Body $ticketBody -ContentType "application/json"
13} else {
14 Write-Output "Fix holding. No action needed."
15}This is the critical distinction between automation and proactive remediation. Automation just runs a script faster. Proactive remediation closes the loop by checking its own work and only escalating to a human when the fix genuinely fails, complete with the diagnosis already attached.
#Step 5: Measuring the Deflection
To prove this is worth the engineering time, track two numbers before and after rollout: the monthly count of tickets tagged ‘Wi-Fi intermittent’ or ‘network drops’, and the average handle time on any that still slip through. Most environments running this remediation pattern see an 80-90% reduction in this ticket category within the first month, because the majority of instances are caught and fixed before the user experiences enough drops to bother reporting it.
Build a simple weekly report pulling from the logging webhook data rather than the ticketing system, since the whole point is that most of this activity never touches the ticketing system at all.
1SELECT
2 COUNT(*) AS remediations_applied,
3 COUNT(DISTINCT device_id) AS unique_devices,
4 SUM(CASE WHEN ticket_suppressed = true THEN 1 ELSE 0 END) AS tickets_avoided
5FROM dex_events
6WHERE category = 'network_power_management'
7 AND timestamp >= NOW() - INTERVAL '7 days';#The Payoff
None of this requires exotic tooling. A DEX platform or even native Event Log querying, an RMM or Intune proactive remediation pairing, and a lightweight webhook are enough to convert a chronic, low-severity, high-volume ticket category into a background process nobody thinks about. The technician’s job shifts from repeatedly diagnosing the same five-second fix to maintaining the detection thresholds and reviewing the weekly deflection report. That is the actual definition of engineering a ticket out of existence: the problem still happens, technically, but no human ever has to know.
Advanced suggested reading
Ready to go deeper?
These articles come from KBY’s senior engineering editorial. Expect denser architecture, fewer introductory explanations and deeper production trade-offs.
Systems Engineering
Debugging Write Skew Under Serializable Isolation
How SIREAD predicate locks, rw-antidependency graphs and pivot detection expose and resolve write skew bugs hiding under serializable snapshot isolation.
The IT Toolkit
Building a Bandwidth-Delay Product Calculator
How BDP maths, RFC 1323 window scaling, and Mathis-model loss correction combine into a diagnostic tool for tuning throughput on long-fat networks.
Systems Engineering
Diagnosing PgBouncer Pool Exhaustion Under Load
Why 40 stateless API pods can saturate PgBouncer while Postgres sits idle, and how transaction-mode pooling and pool sizing math fix it.
Comments
Add a thoughtful note on Why Wi-Fi Adapters Sleep Through Support Calls. Comments are checked for spam and held for moderation before appearing.