Quick and dirty workaround for unstable Wi-Fi in Windows 10

One of the commonly reported issues after upgrading to Windows 10 is that Wi-Fi becomes unstable.

In the cases that I have seen, Wi-Fi will be trying to connect but is stuck on "Attempting to authenticate".

Most people reboot to get online, but actually, disabling and reenabling the WLAN adapter will get you online much faster.

Until a permanent fix is released – whether it will be a hotfix from Microsoft or a driver update for the affected adapters – I have created a quick and dirty workaround, that:

  • Finds all wireless network adapters, that are in the state Disconnected

  • Disables the network adapter

  • Enables the network adapter

This gets you connected to the WLAN almost instantaneously, once it's been reenabled.

It consists of a PowerShell script, and a batch file that calls the PowerShell script and runs it elevated (which is required in order to perform the actions on the network adapter).

To run the PowerShell script, you must first have run Set-ExecutionPolicy RemoteSigned in a PowerShell session.

 

Before you do anything else:

  1. Check if you have VPN software installed

  2. If you do, check if that version is compatible with Windows 10
    Especially there are issues with older versions of Cisco VPN client and SonicWall Global VPN client

  3. If you do have an unsupported VPN client, uninstall it and reboot

  4. If this does not help, follow the recommendations in the Microsoft KB article here: No wireless networks are available after you upgrade from Windows 8.1 to Windows 10

  5. Also, make sure that your antivirus software is compatible with Windows 10

 

If this does not apply to you or does not help, then you can try my workaround:

Copy this and paste it into a text editor and save as C:\RestartWLANNIC.ps1:

Get-NetAdapter |  

Where-Object {$_.PhysicalMediaType -eq "Native 802.11" -and $_.MediaConnectionState -eq "Disconnected"} |  

Disable-NetAdapter -Confirm:$False -PassThru |  

Enable-NetAdapter -Confirm:$False