How to launch a command on network connection/disconnection?

I have a wifi connection that requires to authenticate using a web form once the wireless link is established. I know how to automate the authentication with a script that uses curl/curlIE.

But how can I ask Windows to call my script every time I connect to a particular network connection?

I would be also interested in receiving the name of the wireless profile or the ESSID on the command-line of my script.


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:

  1. Open the Task Scheduler. You can find it by typing Task Scheduler into the start menu search box, or under Programs | Accessories | System Tools.
  2. In the Task Scheduler library, create a new task by clicking Create Task in the Actions panel on the right side.

    add task

  3. Give the task a name like "detect network connect" or whatever you choose

  4. On the Triggers tab, click New... and select On an Event from the dropdown box.

    dropdown trigger

  5. Choose the following settings:

    • Log: Microsoft-Windows-NetworkProfile/Operational
    • Source: NetworkProfile
    • Event ID: 10000
  6. Click OK, then go to the Conditions tab.
  7. Check the box for Start only if the following network connection is available and choose the network you want to run the script with
  8. Under the Actions tab, click New... and select Start a program. Enter the location of the script file you want to run, then click OK.
  9. Set any other task settings you want to, then click OK.

Setting an event for when you disconnect from the network:

  1. Follow steps 2-4 above
  2. Use the following event trigger settings:
    • Log: Microsoft-Windows-NetworkProfile/Operational
    • Source: NetworkProfile
    • Event ID: 10001
  3. 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.
  4. 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".