IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

VBScript gestion de connexions réseau - Empecher la connexion au WiFi si LAN branché et inversement.


Sujet :

VBScript

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut VBScript gestion de connexions réseau - Empecher la connexion au WiFi si LAN branché et inversement.
    Bonjour à tous,

    Dans le cadre de la gestion de mon parc informatique, j'ai cherché un petit script pour empêcher mes utilisateurs d'être connecté à la fois en WiFi et en LAN. J'ai donc trouvé un script sur IntelliAdmin (Netswitch.vbs) qui permet de surveiller une connexion et de switcher sur une autre si elle tombe et de revenir dessus si elle revient.Le problème, c'est que ce script se lance avec deux arguments qu'il fallait saisir manuellement.

    J'ai donc amélioré le script pour obtenir quelque chose de plus 'automatique' grâce à deux fonction qui récupère les noms des connexions LAN et WiFi. Mais mon code n'est pas très robuste. En effet, pour trouver les noms des interface, je cherche des mots qui sont susceptibles d'apparaître dans les noms des interfaces sur les PC de mes utilisateurs. Je m'explique :

    Pour les réseaux LAN, je cherche un nom d'interface contenant '* local' (* étant n'importe quel caractère) et je récupère le nom. Ne récupérant que les noms qui terminent par 'local', j'élimine tous les Réseaux local 2, 3, 4 ... A priori, les utilisateurs devraient avoir le réseau entreprise en Réseau local "1".

    Pour les réseaux WiFi, j'effectue la même opération avec le mot clé '* sans *'.
    Le script devient donc extrêmement sensible à tout changement de nom d'interface.

    Des petits malins peuvent donc facilement trouver comment contourner le script.

    J'en suis venu à trouver cette solution car je n'ai trouvé aucune variable me permettant de differencier une interface LAN d'une interface WiFi dans la classe w32_NetworkAdapter. En effet les deux interfaces sont catégorisées 'Ethernet 802.3' et non 'Ethernet 802.3' et 'Wireless' comme je l'aurai pensé.

    Connaissez-vous donc un moyen de différencier une interface WiFi d'une interface LAN d'une manière similaire ?

    Merci de vos futures réponses.

    Voici mon Code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    	'*********************************************
    	'* Net Switcher - Watches one network card   *
    	'* for connectivity, and toggles another     *
    	'* http://www.intelliadmin.com               *
    	'*********************************************
     
    	Sub EnableAdapter( sAdapterName, bStatus )
    		Dim objWMIService, colItems
    		Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
        	Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkAdapter",,48)
        	For Each objItem in colItems
    			if (UCase(Trim(objItem.NetConnectionID))=UCase(Trim(sAdapterName))) then
    				if (bStatus) then
    					objItem.Enable
    				else		
    					objItem.Disable
    				end if
    			end if
    		Next
        End Sub 
     
     
    	Function GetNetworkAdapterNames_LAN()
    		Dim sConnexionLan, objWMIService
    		Dim aConnexionLan 
    		Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    		REM WScript.Echo ("GetNetworkAdapterNames_LAN")	
    		Set aConnexionLan = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionID like '%local'",,48)
    		For Each objItem in aConnexionLan
    			REM WScript.Echo ( "NetConnectionID : " & objItem.NetConnectionID )
    			sConnexionLan = objItem.NetConnectionID
    		Next
    	GetNetworkAdapterNames_LAN = sConnexionLan
    	End Function
     
     
    	Function GetNetworkAdapterNames_WiFi()
    		Dim sConnexionWifi, objWMIService
    		Dim aConnexionWifi 'As New List(Of String)
    		Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    		REM WScript.Echo ("GetNetworkAdapterNames_WiFi") 	
    		Set aConnexionWifi = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionID like '%sans%'",,48)
    		For Each objItem in aConnexionWifi
    			REM WScript.Echo ( "NetConnectionID : " & objItem.NetConnectionID )
    			sConnexionWifi = objItem.NetConnectionID
    		Next
    	GetNetworkAdapterNames_WiFi = sConnexionWifi
    	End Function
     
    	Function AdapterStatus( sAdapterName )
    		Dim objWMIService, colItems
    		Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
        	Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkAdapter",,48)
        	REM WScript.Echo ("AdapterStatus")
    		AdapterStatus = false
        	For Each objItem in colItems
    			if (UCase(Trim(objItem.NetConnectionID))=UCase(Trim(sAdapterName))) then
    				AdapterStatus = (objItem.NetConnectionStatus=2)
    			end if
    		Next
        End Function 
     
    	Function AdapterExists( sAdapterName )
    		Dim objWMIService, colItems
    		Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
        	Set colItems = objWMIService.ExecQuery("Select * from Win32_NetworkAdapter",,48)
        	REM WScript.Echo ("AdapterExists") 
    		AdapterExists = false
        	For Each objItem in colItems
    			if (UCase(Trim(objItem.NetConnectionID))=UCase(Trim(sAdapterName))) then
    				AdapterExists = True
    			end if
    		Next
        End Function 
     
     
    	Dim bCurrentStatus
    	Dim bChanged
    	Dim sWatchNetworkCard
    	Dim sSwitchNetworkCard
     
    	REM if (WScript.Arguments.Count<2) then
    		REM WScript.Echo "*********************************"
    		REM WScript.Echo "* IntelliAdmin Net Switcher     *"
    		REM WScript.Echo "* http://www.intelliadmin.com   *"
    		REM WScript.Echo "*********************************"
    		REM WScript.Echo vbCrLf & "Usage: " & vbCRLF
    		REM WScript.Echo " NetSwitch.vbs <Card To Watch> <Card To Switch>"
    		REM WScript.Echo vbCrLF & "Explanation: " & vbCRLF
    		REM WScript.Echo " Net Switcher can be used to make sure your"
    		REM WScript.Echo " wireless card is only enabled when no "
    		REM WScript.Echo " ethernet connection is available"
    		REM WScript.Echo vbCrLF & "Example: " & vbCRLF
    		REM WScript.Echo " NetSwitch.vbs " & chr(34) & "Local Area Connection" & chr(34) & " " & _
    			REM chr(34) & "Wireless Connection" & Chr(34)
    		REM WScript.Quit
     
    	REM end if
     
    	Dim sWatch, sSwitch 
     
    	'sWatchNetworkCard = WScript.Arguments(0)
    	'sSwitchNetworkCard = WScript.Arguments(1)
    	sWatchNetworkCard = GetNetworkAdapterNames_LAN
    	sSwitchNetworkCard = GetNetworkAdapterNames_WiFi
    	REM WScript.Echo ("GetNetworkAdapterNames_Lan & WiFi")
    	REM GetNetworkAdapterNames_LAN()
    	REM GetNetworkAdapterNames_WiFi()
     
    	if (Not(AdapterExists(sWatchNetworkCard))) then
    	 WScript.Echo "Error: Could not find the adapter (" & sWatchNetworkCard & ")"
    	 WScript.Quit
    	 REM WScript.Echo ("if_AdapterExists_Watch")
    	end if
     
    	if (Not(AdapterExists(sSwitchNetworkCard))) then
    	 WScript.Echo "Error: Could not find the adapter (" & sSwitchNetworkCard & ")"
    	 WScript.Quit
    	 REM WScript.Echo ("ifAdapterExists_Switch")
    	end if
     
    	bChanged=TRUE
     
    	while(True)
    	REM WScript.Echo ("main")
    		if (bChanged) then
    			bChanged=FALSE
    			bCurrentStatus = AdapterStatus(sWatchNetworkCard)
    			if (bCurrentStatus) then
    				EnableAdapter sSwitchNetworkCard,False
    			else
    				EnableAdapter sSwitchNetworkCard,True
    			end if
    		end if
    		WScript.Sleep(1000)
    		if (bCurrentStatus<>AdapterStatus(sWatchNetworkCard)) then
    			bChanged=TRUE
    		end if
    	wend

  2. #2
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    bonjour,
    la classe Win32_NetworkAdapter est remplacée à partir de W8 par la classe MSFT_NetAdapter peut-être plus performante sur ce point
    enfin avec ms, on ne peut être sûr de rien
    si la propriété AdapterType ne renvoie pas de résultat pertinent, j'essaierais de ruser en testant d'autres propriétés susceptibles de fournir
    indirectement cette info

    par ex Manufacturer (les interfaces matérielles lan et wifi peuvent peut-être être distinguées de cette manière)
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    L'ensemble du parc est sous Win7 Pro, je n'ai donc pas accès à cette classe pour le moment

    Voila le genre d'infos que j'ai récupéré :

    AdapterType : Ethernet 802.3
    AdapterTypeID : 0
    MACAddress : D4:BE: D9:43: D2:4A
    NetConnectionStatus : 2
    ProductName : Intel(R) 82579LM Gigabit Network Connection
    DeviceID : 7
    Availability : 3
    PhysicalAdapter : True
    ServiceName : e1cexpress
    NetConnectionStatus :2
    NetConnectionID : toto

    AdapterType : Ethernet 802.3
    AdapterTypeID : 0
    MACAddress : 44:6D:57:5F:6E:C0
    NetConnectionStatus : 2
    ProductName : Carte Half-Mini de réseau local sans fil Wireless-N DW1501
    DeviceID : 11
    Availability : 3
    PhysicalAdapter : True
    ServiceName : BCM43XX
    NetConnectionStatus :2
    NetConnectionID : tata

    J'ai bien pensé à faire le tri avec le code MAC de constructeur ou voire même le nom du constructeur mais c'est un paramètre trop inconstant pour être fiable, si l'utilisateur possède une bécane donc la carte réseau est différente, le script inutile.

    Pour ce problème, on ne peut pas se fier au matériel présent sur les ordinateurs. Il me faut trouver une variable spécifique à toutes les interfaces LAN et une autre à toutes les interfaces WIFI.

    Sacré casse-tête ...

  4. #4
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    c'est sûr que cette classe wmi n'est pas fiable
    l'ultime solution, lire le Type de la structure IP_ADAPTER_INFO renvoyée par GetAdaptersInfo de la librairie Iphlpapi.dll
    avec ceci
    mais bon....
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Ca m'a l'air assez compliqué mais je vais y jeter un coup d'oeil

    Est-ce que cela ne risque pas de perturber le déploiement via une GPO sur le parc si on se sert de la dll ? Il faudra qu'elle soit sur chaque PC où le script est déployé pour que ça fonctionne, non, et au même endroit de surcroît ?

    EDIT : Bon, apparemment ça chie rien que pour créer le wrapper. Peut-être que ça fonctionne pas pareil sous windows 7

  6. #6
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    Il faudra qu'elle soit sur chaque PC où le script est déployé pour que ça fonctionne, non, et au même endroit de surcroît ?
    c'est une dll mais c'est surtout un composant COM qui doit être normalement référencé dans la bdr de chaque PC... sauf à utiliser ce genre de technique
    ça reste réservé aux gens très motivés
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Je vois Ca risque d'être un peu chaud, étant un gros noob en vbs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Un composant ActiveX ne peut pas créer un objet : 'DynamicWrapperX'
    Merci quand même pour les infos, je les garderais bien au chaud dans un coin

    EDIT :

    http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

    De toute manière les infos dispos dedans ont pas l'air bien plus précises que pour la WMI

  8. #8
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut

    Peut-être ce HTA vous donne plus d'idée : Script de gestion connexions réseaux
    Bonne Chance à vous

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci, mais ce script permet d'offrir une interface user-friendly pour se connecter à un réseau.

    Moi, je cherche a mettre en place un script, qui s'execute au démarrage de la machine, qui serait invisible à l'utilisateur et qui l'empêcherait de se connecter à la fois à son interface LAN et à son interface WiFi .

Discussions similaires

  1. Problèmes de connexion réseau à MySQL
    Par digital prophecy dans le forum Bases de données
    Réponses: 3
    Dernier message: 05/05/2005, 21h35
  2. Services Oracle ne démarre pas sans connexion réseau??
    Par dreamanoir dans le forum Oracle
    Réponses: 6
    Dernier message: 22/02/2005, 00h44
  3. Connaître l'état d'une connexion réseau
    Par SteelBox dans le forum Windows
    Réponses: 8
    Dernier message: 29/07/2004, 12h30
  4. API MySQL - Connexion réseau
    Par klael dans le forum Bases de données
    Réponses: 3
    Dernier message: 18/03/2004, 09h25
  5. [Réseau] Créer une connexion Internet
    Par Tranber dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 17/10/2002, 17h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo