How to launch a command on network connection/disconnection?
In Windows Vista and later, you can do this using a scheduled task with an event log trigger. The first event will be triggered by connecting to the network, and you will specify which network you must be connected to for it to run. The second event will be triggered when disconnecting from any network. Each event will run a specific task that you specify; likely the scripts you mentioned having written.
Setting an event for when you connect to the network:
- Open the Task Scheduler. You can find it by typing
Task Scheduler
into the start menu search box, or underPrograms | Accessories | System Tools
. In the Task Scheduler library, create a new task by clicking
Create Task
in the Actions panel on the right side.Give the task a name like "detect network connect" or whatever you choose
On the
Triggers
tab, clickNew...
and selectOn an Event
from the dropdown box.Choose the following settings:
- Log:
Microsoft-Windows-NetworkProfile/Operational
- Source:
NetworkProfile
- Event ID:
10000
- Log:
- Click OK, then go to the
Conditions
tab. - Check the box for
Start only if the following network connection is available
and choose the network you want to run the script with - Under the
Actions
tab, clickNew...
and selectStart a program
. Enter the location of the script file you want to run, then clickOK
. - Set any other task settings you want to, then click
OK
.
Setting an event for when you disconnect from the network:
- Follow steps 2-4 above
- Use the following event trigger settings:
- Log:
Microsoft-Windows-NetworkProfile/Operational
- Source:
NetworkProfile
- Event ID:
10001
- Log:
- Skip steps 6-7, as you will no longer be attached to any network at all. This event will therefore run any time you disconnect from any network.
- Follow steps 8-9 again
It seems that Start only if the following network connection is available
is broken after Windows 10 anniversary update.
Use this custom trigger instead:
<QueryList>
<Query Id="0" Path="System">
<Select Path="Microsoft-Windows-NetworkProfile/Operational">
*[System[(EventID=10000)]] and *[EventData[(Data[@Name="Name"]="YOUR-SSID-HERE")]]
</Select>
</Query>
</QueryList>
In corporate networks use the name of the domain instead of the SSID. In this case the category of the event will be "Domain Authenticated" and not "Private".
If you happen to be using a Thinkpad, you can take advantage of ThinkVantage Access Connection, available for Windows 7, Vista and XP.
ThinkVantage Access Connection is the network connection manager software shipped with ThinkPad - if not, downloadable from their support site. When you make a new profile for your location, there is a wizard which asks if you want to configure a list of program to start when that location is connected. It offers to kill the program when the net is out, too.
Note that the software can be configured to work without any location profile at all, and that's perhaps the initial status - in that case, there is no way to configure a list of program to start when wifi is connnected: you have to create a connection profile to contain the list.
For my own experience, I try to avoid using the software - it takes a lot more time to get connected than without it, and sometimes fails to establish new connection when booting (can be fixed by manually reconnect).
The software only works with the WIFI driver provided with the thinkpad.
On a side note, this software offers to establish connection before user logs in, as an option when you create the profile. I don't know if this is possible without it.