Automatic Wi-Fi connectivity checker & reconnect script

I often find myself using various remote access tools to control kiosk and digital signage displays around the country, many of these devices are connected via wireless cards. Assuming the router is up, it can, from time to time be necessary to restart the wireless NIC, not an easy task to do if you’ve already lost connectivity. I first used this on Windows XP using the DevCon command-line utility, the script just pings Google and if the ping is successful nothing happens, if not it disconnects the WiFi connection, waits 5 seconds and attempts to reconnect.

This set of instructions is for Windows 7, I believe this would work in Windows 8 but I haven’t tested that, Windows XP instructions can be found in the comments, along with a URL to for the required files.

What you need to complete this:

For starters, you need a WiFi card, if you don’t have one integrated into your CPU here is a cheap wireless N card that’s compatible with more Windows flavors and works well, Medialink- 150Mbps Wireless N USB Adapter – XP / Vista / Windows 7 & 8 Compatible

1) SSID of Wireless Network (CaSe Sensitive)

C:\>;netsh wlan show networks

2) Wireless Profile Name (CaSe Sensitive)

C:\>;netsh wlan show profile

3) Name of Wireless Interface (CaSe Sensitive)
C:\>;netsh wlan show interfaces

Now with those three pieces of information you should be able to run the following command (remember these are CaSe Sensitive) my assumptions are:

1) your SSID name is: My Wireless Network

2) Your profile name is: My Wireless Network

3) Your interface is: Wireless Network Connection

C:\>;netsh wlan connect ssid=”My Wireless Network” Name=”My Wireless Network” Interface=”Wireless Network Connection”

If that works, move on to test the disconnect, if it doesn’t work you probably missed my four previous comments about these Interface/profile and SSID names being case sensitive.

C:\>;netsh wlan disconnect interface=”Wireless Network Connection”

Next you need to create the script, open notepad and add this text to the document

REM Restart Wireless Connection
REM Don’t restart if ping works.
ping -n 1 google.com
if %errorlevel% EQU 0 goto end
netsh wlan disconnect interface=”Wireless Network Connection”
TIMEOUT 5
netsh wlan connect ssid=”My Wireless Network” Name=”My Wireless Network” Interface=”Wireless Network Connection”
:end

Save the document as restartwireless.bat (make sure you put the .bat otherwise you are just saving it as a text file and we need a batch)

It’s probably not a bad idea to open the command prompt, navigate to where you saved the new batch file and run it by typing

restartwireless.bat

Make sure you test this both with you WLAN connected and disconnected to make sure it works both ways. Provided that works, all you need to do is schedule the script to run periodically using Windows Task Scheduler. You could have the script run every hour, or once a day, lots of settings you could tweak there, might want to make sure you run the task with elevated privileges in the task scheduler.

13 thoughts on “Automatic Wi-Fi connectivity checker & reconnect script

  1. Thanks for this, Jeremy! Seems to be just what I’ve been looking for. Just an FYI, I originally copied-and-pasted your script into Notepad2, but the end of step 3 failed to work for me. Then I realized it was because the quotation marks came through as curly quotes. Dunno if this is exclusive to Notepad2 or if it’s worth editing your script above, but there you have it.

    • Hmm, good to know, same thing happened when I copied it to notepad. I don’t know it’s either the template or the block quotes, i’ll take a look later but hopefully anyone who uses it, reads this. Glad this worked for you, I still use it!

  2. Thanks Jeremy, this helps a lot. I just attempted to modify it slightly and let the batch loop check the connection and it turned out to be working. So I guess we can get rid of Windows Task Scheduler ; )

    • Cool idea, did you put a timeout in there? Only reason I ask is I wonder how many pings before you get flagged for a ping flood, I assume it would take far more than this loop would generate though and it sounds like a nice way to get rid of the task scheduler. Thanks for sharing!

      • Yes, I did put a timeout for 60s at the beginning of the loop, which means in the worst case, more than 1 min is needed to get the wifi reconnected ; (

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>