guide · static export
PC

Limit One App's Bandwidth with Policy-Based QoS

Throttle a single executable outbound with a Windows policy, without installing a traffic shaper on the network.

by@guidox updated:10/31/26 time:15 min level:Intermediate tested on:Windows 11 24H2 works on:Windows 10, Windows 11 tools:PowerShell as administrator, Windows 11 Pro
TL;DR

Create a **policy-based QoS** rule with `New-NetQosPolicy` that matches the executable path and sets a throttle rate, then confirm it with `Get-NetQosPolicy`. The rule only shapes traffic the machine sends.

Before you start

Requirements

  • Windows 11 Pro
  • PowerShell as administrator
  • Fifteen minutes
Step by step

Instructions

01

Find the real executable

Launchers spawn helper processes. The updater that saturates the line is often a second exe next to the first, so read the paths instead of guessing the name.

Get-Process | Where-Object Path | Select-Object Name,Path -Unique | Sort-Object Name
02

Create the throttle rule

The rate is in bits per second, so ten megabits is ten million and not ten megabytes. Writing the number out avoids the unit trap that makes a rule either useless or brutal.

New-NetQosPolicy -Name SteamLimit -AppPathNameMatchCondition C:\Program Files (x86)\Steam\steam.exe -ThrottleRateActionBitsPerSecond 10000000
⚠ warningA suffix such as MB is read as megabytes per second by PowerShell. Ten of those is eighty megabits, which throttles nothing on a normal line.
03

Add the second process if there is one

One policy matches one path. A launcher with a separate updater needs its own rule, otherwise the limit applies to the quiet process and misses the busy one.

New-NetQosPolicy -Name SteamHelperLimit -AppPathNameMatchCondition C:\Program Files (x86)\Steam\bin\cef\cef.win7x64\steamwebhelper.exe -ThrottleRateActionBitsPerSecond 5000000
04

Confirm what the policy group holds

The cmdlet lists every rule with its conditions. A rule with a wrong path applies to nothing and reports no error at creation time.

Get-NetQosPolicy | Format-List Name,AppPathName,ThrottleRate
tipRules live in the registry and survive a reboot. Delete them with Remove-NetQosPolicy and the name.
05

Test with a measured transfer

Run the same download before and after the rule is in place. Task Manager per-process network columns show the rate the application actually achieves.

Get-NetTCPConnection -State Established | Group-Object OwningProcess | Sort-Object Count -Descending | Select-Object -First 5
06

Remove the rule when it is no longer needed

A forgotten throttle makes a client look broken months later, and nobody remembers creating it. Clean up after the experiment.

Remove-NetQosPolicy -Name SteamLimit -Confirm:$false
Troubleshooting

Common issues

The rule changes nothing

The wrong executable, or the traffic comes from another process. Check the connection list for the owning process ID.

Downloads are still fast

QoS shapes outgoing traffic only. Incoming downloads are limited by the sender; do that on the router.

The cmdlet is not found

The NetQos module needs an elevated session and a Pro or Enterprise build.

The limit is far too harsh

The rate was given in bytes rather than bits. Multiply by eight for the intended value.

FAQ

Frequently asked

Does it work per user?

No, policies are per machine and apply to every session.

Can I prioritise instead of limiting?

Yes, the same cmdlet offers a DSCP value, but routers must honour it for any effect.

How to undo this

Remove-NetQosPolicy -Name followed by the rule name deletes it immediately; no restart is required.

Changelog · 1 entry
  1. 2026-10-31
    First version
Interactive version: checklist, feedback, related guides →

Free · no account needed · tracks your progress