I use speed tests a lot. However, the problem is that their scope is limited; they show you how fast your device retrieves and sends data from the internet. Raw bandwidth is just one aspect of network performance, which means that speed results don't always surface why websites lag or why downloads may freeze halfway.

There are, however, a handful of PowerShell commands that reveal details you don't see in speed tests, surfacing DNS latency, packet loss, adapter errors, and bad routing priorities even better than most GUI tools. They are my go-to for network troubleshooting.

Trace where your connection actually breaks down

Find packet loss and unstable hops in real time

Using the Test Connection command
Afam Onyimadu / MUO

I feel frustrated when my fast internet starts to feel slow. With speed tests only measuring throughput to a nearby server, I still feel stuck because the problem is often further along the route. This is when I turn to the Test-Connection command for clarity. It's best used in any of these situations:

  • Random gaming lag despite stable speeds
  • Voice or Zoom calls cutting out
  • Certain websites loading slowly while others work fine
  • Packet loss during downloads

Here are the actual commands to run:

Test-NetConnection "8.8.8.8" -TraceRoute

The command maps hops between the target and my device, revealing latency for each node. The two things to check for are sharp latency spikes on hops that linger and packet loss starting on nodes and persisting. The patterns it reveals often indicate issues along the route beyond the local network rather than local configuration.

I often include the -InformationLevel Detailed flag when I need to actively expose the actual Round-Trip Time (RTT) in milliseconds for the final destination.

Windows laptop showing internet speed test result
Windows was throttling my internet until I found these 5 settings

Your internet might already be fast, Windows just isn’t letting it feel that way.

4

Check whether your adapter is quietly dropping packets

Expose network errors Windows normally hides

Running the Get-NetAdapterStatistics command
Afam Onyimadu / MUO

I have had periods of inconsistent connectivity that were actually not the fault of my ISP. On one such occasion, it was a failing Ethernet cable and my noisy USB dock. Browser-based speed tests revealed no problems. However, I had an adapter silently discarding packets while accumulating transmission errors.

I use the Get-NetAdapterStatistics command when I notice any of these:

  • Random connection drops
  • Slow local file transfers
  • Wi-Fi instability that comes and goes
  • Docked laptops behaving inconsistently

Here is the exact command I run:

Get-NetAdapterStatistics | Format-Table Name, ReceivedBytes, SentBytes, ReceivedDiscards, ReceivedPacketErrors

ReceivedPacketErrors shows frames that arrived damaged or malformed — a sign of a bad cable, failing port, or flaky wireless driver. ReceivedDiscards shows packets that arrived intact but were dropped anyway, which usually means the adapter or driver was overwhelmed and couldn't keep up. What you have to watch for are values steadily climbing or already in their thousands. These are pointers to a physical or wireless instability problem.

Certain counters may expose names and values that vary slightly depending on your adapter driver and hardware vendor.

Measure whether your DNS server is slowing everything down

Fast internet means nothing with slow DNS resolution

Measure DNS lookup response time
Afam Onyimadu / MUO

Sometimes, after running a speed test that seems fine, web pages continue to hang before opening. Sometimes this delay is a DNS issue and has nothing to do with bandwidth. Domain names are resolved to IP addresses, and the process drags if that lookup takes too long.

I can run a command to measure DNS lookup speed if I notice any of these:

  • Websites hang before loading
  • Browsers feel slow despite fast downloads
  • Apps stay stuck on "Connecting…"
  • Pages suddenly load all at once after a noticeable wait

Here is the exact command I run:

Measure-Command {

Resolve-DnsName -Name "amazon.com"

} | Select-Object TotalMilliseconds

You typically get results in single or low double-digit milliseconds for responsive DNS. Investigate if DNS lookups exceed ~100ms. You may even switch to faster DNS servers like 8.8.8.8 or 1.1.1.1.

Find the apps quietly consuming your network

Track active connections by process ID

Finding the apps quietly consuming your network
Afam Onyimadu / MUO

Sometimes, when my network slows down, it's usually a cloud-sync app, game launcher, or browser process launching several background connections. The taskbar doesn't give a hint, and even the Resource Monitor may show moderate network usage.

You can see processes with the most active connections, and it's often called for when you notice any of these:​​​​​​​

  • Unexpected bandwidth spikes
  • High data usage while the machine sits idle
  • Slow downloads during what should be background activity Unexplained network congestion during normal use

Here is the actual command to run:

Get-NetTCPConnection -State Established |

Group-Object -Property OwningProcess |

Sort-Object Count -Descending |

Select-Object Count, @{Name='PID';Expression={$_.Name}}

Your output gives process IDs with their corresponding number of established TCP connections. To match the ID to an app, run this command, replacing 17872 with the actual process ID: Get-Process -Id 17872.

High connection counts are not always signs of high bandwidth use, but they expose noisy background apps worth investigating.

Verify that Windows is prioritizing the right adapter

Check connection metrics before blaming your router

Windows doesn't always correctly choose the network adapter that should take priority. This is even more common on laptops connected to Ethernet docks while Wi-Fi remains active.

Viewing adapter priority metrics comes in handy in these cases:​​​​​​​

  • Docking a laptop
  • Switching between Wi-Fi and Ethernet
  • Installing or connecting to a VPN
  • Seeing inconsistent speeds on a wired connection

Here is the exact command to use:​​​​​​​

Get-NetIPInterface -AddressFamily IPv4 |

Sort-Object InterfaceMetric |

Format-Table InterfaceAlias, InterfaceMetric

Windows treats the adapter with the lowest metric value as the top-priority route. This means that Wi-Fi can become the priority over wired if it has a lower metric value. If you don't manually override these values, Windows will automatically handle them.

I keep coming back to these commands

There is a place for speed tests, but at best they respond to a very narrow question. These commands answer the diagnostic questions you need when network behavior isn't explained by simple speed tests. I've learned to spot and fix several Windows issues using PowerShell. Once you master PowerShell, from networking to performing daily tasks, there will be almost no limits to what you can do on Windows.