Hi Neil — frustrating but fixable. Below are steps to both find the cause and force the network profile to stay Private on each PC. I’ll give quick diagnostics first, then a safe persistent fix you can use even on Windows 11 Home.
Quick checks (tell me what you see)
- Are the PCs using Wi‑Fi, Ethernet or both?
- Do you use any VPN (WireGuard, OpenVPN, corporate VPN), virtualization (Hyper‑V, VirtualBox), or third‑party security/firewall software?
- Are these PCs domain‑joined (work/school account) or local/home PCs?
Diagnostic commands (run in an elevated PowerShell and paste results if you want help diagnosing)
- Open PowerShell as Administrator and run:
Get-NetConnectionProfile
This shows the network Name, InterfaceIndex and current NetworkCategory (Public/Private/Domain).
Why this happens (short)
- Windows may re-classify a network when the adapter/driver resets, if you connect to a different SSID, when a VPN/virtual adapter appears, or when third‑party security software changes firewall/network settings. Domain policies (GPO) can also override local settings.
How to make the profile stay Private (recommended)
Option A — One‑line PowerShell (temporary but immediate)
- Run PowerShell as Administrator and replace <Name> with the Name from Get-NetConnectionProfile:
Set-NetConnectionProfile -Name "<Name>" -NetworkCategory Private
Or to set any non‑private connections to Private:
Get-NetConnectionProfile | Where-Object {$.NetworkCategory -ne 'Private'} | ForEach-Object { Set-NetConnectionProfile -InterfaceIndex $.InterfaceIndex -NetworkCategory Private }
Option B — Persistent enforcement (recommended if it keeps flipping back)
Create a scheduled task that runs at startup/logon and forces networks to Private:
- Open Task Scheduler → Create Task.
- Name: Enforce Private Network. Check “Run with highest privileges”.
- Triggers: “At startup” and “At log on (Any user)”.
- Action: Start a program:
- Program/script: powershell.exe
- Add arguments:
-WindowStyle Hidden -ExecutionPolicy Bypass -Command "Get-NetConnectionProfile | Where-Object {$.NetworkCategory -ne 'Private'} | ForEach-Object { Set-NetConnectionProfile -InterfaceIndex $.InterfaceIndex -NetworkCategory Private }"
- OK. This runs as admin and will re‑set the profile if something changes it.
Notes & cautions
- You need Administrator rights for Set-NetConnectionProfile and for the scheduled task.
- If the machine is domain‑joined, domain GPO can override local settings — check with your IT. Domain networks should be Category = Domain.
- If a VPN or security app is changing the profile, the scheduled task will mask the symptom but not stop the app from making changes. If you have a VPN/security app, check its settings or temporarily disable it to see whether the profile still flips.
Further troubleshooting (if it still flips)
- Check Event Viewer → Applications and Services Logs → Microsoft → Windows → NetworkProfile → Operational for events when the change happens — note the timestamp and what other events show at the same time.
- Check whether a virtual adapter appears (Get-NetAdapter) or VPN client logs.
- Temporarily disable third‑party firewall/antivirus and watch for changes.
- Tell me the output of Get-NetConnectionProfile and if you see any VPN adapters from Get-NetAdapter — I’ll suggest a tailored fix.
If you want, tell me:
- Output of Get-NetConnectionProfile,
- Whether the machine is Home/Pro/Enterprise,
- If you use a VPN or security suite,
and I’ll give a precise script or a step‑by‑step Task Scheduler export you can import.