66

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.

5
  • 1
    Probably useless but I found this through googling. It apparently enumerates your connections and might provide something you can query with a script to determine when an adapter connects/disconnects. msdn.microsoft.com/en-us/library/ms739931%28v=VS.85%29.aspx
    – CreeDorofl
    Mar 26, 2011 at 19:26
  • I don't want to have to check the state every few seconds. Network Location Awareness notifications is interesting, but I see no easy way to use it with only scripting.
    – dolmen
    Mar 26, 2011 at 20:23
  • dolmen - is there a way you can post the script you wrote for the authentication too. this question would be a lot more complete with it in it.
    – quest49
    May 4, 2012 at 20:19
  • @quest49 I understand that my script may interest you, but it is irrelevant to the question.
    – dolmen
    Oct 24, 2012 at 19:54
  • Did you ever get an answer to this that satisfied your question?
    – Menasheh
    Nov 10, 2016 at 23:30

4 Answers 4

89

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
12
  • 1
    Great! Thank you for that detailled answer! This is much more than I expected. I found out I can even use a condition on the network connection name, so I can run the command only for a particular WLAN profile.
    – dolmen
    Mar 26, 2011 at 22:25
  • 1
    @AdamMillerchip I just opened the event viewer, disconnected/reconnected, and then looked around.
    – nhinkle
    Jul 10, 2013 at 6:47
  • 1
    Strange, I tried this and nothing....
    – Menelaos
    Jan 22, 2014 at 12:01
  • 1
    For the record, I had to specify as "source" Microsoft-Windows-NetworkProfile (W10 1709)
    – Joril
    Mar 21, 2018 at 12:33
  • 3
    My observations on Win10 are that the 10000 event fires three times when the OS comes up. And it appears that even the last firing may be before TCPIP is fully assigned and routing tables have settled down. Looking for an event that fires when the routing table changes, or the default route changes (as a proxy for going on and off a docking station, or booting up/moving to diff wifi, etc.) Feb 16, 2021 at 19:28
17

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".

3
  • Start only if the following network connection is available seems broken indeed. If I set that option and run the task on demand I get this error: Task Scheduler Service is not available. Task scheduler will attempt to reconnect to it. Nov 21, 2018 at 9:01
  • Is this bug still exists in Windows 10 1803 or later?
    – krrr
    Nov 5, 2019 at 3:14
  • I can confirm that this custom trigger is needed also for me in Windows 10
    – unlikely
    Mar 24, 2020 at 15:42
3

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.

0

To update the answers from @nhinkle and @KRR: I had to use the following XML Query as Windows will sometimes set the "Name" field something like "SSID_5G 2" for the SSID "SSID_5G". Using "Description" matches instead (Windows 10, Version 20H2)

<QueryList>
  <Query Id="0" Path="System">
    <Select Path="Microsoft-Windows-NetworkProfile/Operational">
        *[System[(EventID=10000)]] and *[EventData[(Data[@Name="Descrioption"]="SSID_5G")]]
    </Select>
  </Query>
</QueryList>
1
  • Offhand, I suspect “Descrioption” is a simple typo and tempted to edit it. @jackie-meese
    – rjt
    Mar 27, 2023 at 8:40

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .