Exécuter un script lors d'une connexion VPN Windows

Régulièrement, nous sommes amené à utiliser des connexions VPN depuis nos postes de travail ; pratique pour accéder de manière sécurisée à un réseau d'entreprise ou personnel et aux ressources mises à disposition.

Mais lorsque ces ressources sont de types disques ou imprimantes partagés, une seule solution s'impose : les connecter manuellement. Opération fastidieuse pour tous, voire complexe pour des utilisateurs qui devront manipuler des adresses IP ou des alias, l'automatisation par script satisferait le plus grand nombre.

Cet article explique comment procéder (testé sous Windows 7 et Vista ; adaptable pour les autres versions).

L'événement « connexion VPN »

Pour chaque connexion VPN établie, un événement système est déclenché. Ceci est facilement vérifiable au travers du Journal d'événements Système.

A l'établissement A la fermeture

Catégorie

Nom (du provider)

EventID

Level

System

Rasman

20267

0 ou 4

 

System

Rasman

20268

0 ou 4

Voir la capture d'écran

Capturer l'événement

La capture de l'événement déclenché peut-être réalisée par l'intermédiaire du Planificateur de tâches qui tient lieu de gestionnaire d'événements pour le système.

  • Exécutez le Planificateur de tâches : Outils d'administration, puis Planificateur de tâches.
  • Dans le menu Actions (sur la droite de la fenêtre), cliquez sur Créer une tâche...

Voir la capture d'écran


Onglet Général

  • Attribuez un Nom.
  • Modifiez, si nécessaire, le compte utilisateur d'exécution.

Onglet Déclencheurs

  • Créez un Nouveau déclencheur.
  • Cliquez sur Modifier pour le personnaliser.

Fenêtre Modifier le déclencheur

  • Lancer la tâche Sur un événement.
  • Sélectionnez Personnalisée.
  • Cliquez sur Modifier le filtre pour spécifier les critères.

Onglet XML

  • Saisissez les critères de sélection ci-dessous.
  • Validez ensuite les différentes fenêtres.

                                            
                                                <QueryList>
                                                    <Query Id="0" Path="System">
                                                        <Select Path="System">*[System[Provider[@Name='Rasman'] and (Level=4 or Level=0) and (EventId=20267)]]</Select>
                                                    </Query>
                                                </QueryList>                
                                            
                                        

Voir la capture d'écran


Onglet Actions

  • cliquez sur Nouveau.
  • Ajoutez le ou les scripts que vous souhaitez exécuter.
    Dans l'exemple, nous supposons C:\Test-VPN\Test.vbs.

Voir la capture d'écran


Onglet Conditions

  • Cochez la case Ne démarrer que si la connexion au réseau suivante est disponible.
  • Et précisez N'importe quelle connexion. Ce choix peut-être ajusté en fonction des attentes.

Onglet Paramètres

  • Appliquez, par défaut, les paramètres proposés.
  • Bien entendu, vous pouvez les modifier suivant vos besoins.

 

Validez définitivement la création de la tâche.

Vous pouvez, à tout moment, ré-éditer cette tâche pour en ajuster les paramètres.

Le script VBS

L'objet de cet article n'étant pas de traiter de la syntaxe du VBS, je vous propose de créer le script exemple ci-dessous, en ayant pris soin de l'ajuster à votre environnement (lignes 8 à 10) et de le sauvegarder sous C:\Test-VPN\Test.vbs.

                                            
                                                ' Initialisations
                                                ' ----------------------------------------------------------
                                                Dim choix, mapDrivePath, mapDriveLetter, mapPrinter
                                                Set objNet = CreateObject("WScript.Network")
                                                
                                                ' Personnalisations à réaliser ci-dessous
                                                ' ----------------------------------------------------------
                                                mapDrivePatch = "\\monServeur\partageR"
                                                mapDriveLetter = "R:"
                                                mapPrinter = "\\monServeur\PRNPublique"
                                                
                                                ' Connexion de ressources
                                                ' ----------------------------------------------------------
                                                choix = MsgBox ("Voulez-vous connecter les ressources ?", 4+32, "Connexion VPN")
                                                If (choix = 6) Then
                                                    
                                                    ' Déconnexion d'un éventuel montage réseau
                                                    If objFSO.FolderExists(mapDriveLetter & "\") Then
                                                        objNet.RemoveNetworkDrive MapDriveLetter, true, true
                                                    End If
                                                    
                                                    ' Connexion du disque réseau partagé
                                                    objNet.MapNetworkDrive MapDriveLetter, MapDrivePath
                                                    
                                                    ' Connexion d'une imprimante réseau
                                                    objNet.AddWindowsPrinterConnection mapPrinter
                                                    
                                                End If
                                            
                                        

Réaliser le test

Pour vérifier la bonne exécution du script ci-dessus, connectez vous à votre VPN, pour observer :

  1. l'apparition d'une boîte de dialogue vous demandant si vous souhaitez connecter des ressources (répondez Oui !)
  2. la connexion de ces ressources (R:\ sur \\monServeur\partageR et PRNPublique sur \\monServeur\PRNPublique)

Le tour est joué !

Aller plus loin

Pour aller plus loin, vous devrez ajuster cet exemple à votre environnement et vos attentes :

  • exécution d'un script à la connexion VPN (eventID 20267), à la fermeture du VPN (eventID 20268), les deux cas ?
  • définition du ou des scripts exécutés : vbs, cmd, bat (ou autre), actions réalisées, log, etc.
  • gestion des droits d'accès aux ressources réseau (si ce n'est pas déjà établi).
  • extension pour le rendre multi environnement : Windows 7, Vista, XP, etc.