script deconnexion wifi

script deconnexion wifi - Réseaux - Systèmes & Réseaux Pro

Marsh Posté le 10-03-2015 à 16:58:29    

Bonjour,
 
Mon objectif est de désactiver automatiquement le wifi lorsqu'on connecte le pc portable en ethernet afin d'avoir une seule connexion active.
Il va de soi que toute solutions m'incitant à ce que l'utilisateur fasse une autre manipulation que celles qu'il réalise généralement ne m'intéresse pas ni d'avoir les deux connexions actives.
 
j'ai trouvé un script qui fonctionne sur le modèle de pc que j'utilise, mais ne fonctionne pas sur un autre.
Les 2 postes ont bien win 7 pro 64 bits. par contre l'un est un dell e5540 et l'autre e5510.
 
au niveau du script :
 

Code :
  1. On Error Resume Next
  2. Dim strComputer
  3. Dim objWMIService
  4. Dim colLAN
  5. Dim objWifi,objLAN
  6. Dim state
  7. Dim wireStatus
  8. Dim wifiStatus
  9. state=""
  10. wireStatus=""
  11. wifiStatus=""
  12. Do While True
  13.  
  14. strComputer = "."
  15. Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2" )
  16. Set colLAN = objWMIService.ExecQuery("Select * From Win32_NetworkAdapter Where NetConnectionID like 'Local Area Connection' and PhysicalAdapter='True'" )
  17. Set colWiFi=objWMIService.ExecQuery ("Select * From Win32_NetworkAdapter Where NetConnectionID =" & "'" &GetWirlessName & "'" & "and PhysicalAdapter='True' " )
  18. For Each objWifi In colWiFi
  19.  If objWifi.Netconnectionstatus=2 Then
  20.  wifiStatus=True
  21.  Else
  22.  wifiStatus=False
  23.  End If
  24. Next
  25. For Each objLAN in colLAN
  26. If objLAN.Netconnectionstatus=2 Then
  27.  wireStatus=True
  28.  state=False ' this is very importnat variable to determine when to enable or disbale wireless connection 
  29.  Else
  30.  wireStatus=False
  31.  End If
  32. Next
  33. If True Then
  34. If state <>  False Then
  35.   If wifiStatus = False Then
  36.   EnableWireless GetWirlessName
  37.   End If
  38. Else
  39.  If wifiStatus = True Then
  40.  DisableWireless GetWirlessName
  41.  End If
  42. End If
  43. End If
  44. state=""
  45. wireStatus=""
  46. wifiStatus=""
  47. WScript.Sleep  60000
  48. Loop
  49. ' Function to get wireless adapter name from the registery
  50. Function GetWirlessName
  51. Dim strKeyPath
  52. Dim strComputer
  53. Dim objReg
  54. Dim arrSubKeys
  55. Dim SubKey
  56. Dim strValueName
  57. Dim dwValue
  58. Dim strValue
  59. Const HKLM=&H80000002
  60. strKeyPath="SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}"
  61. strComputer="."
  62. Set objReg=GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv" )
  63. objReg.Enumkey HKLM ,strKeyPath,arrSubKeys
  64. For Each SubKey In arrSubKeys
  65. strValueName="MediaSubType"
  66. objReg.GetDWORDValue HKLM,strKeyPath & "\" & subkey & "\" & "Connection" ,strValueName,dwValue
  67. If dwValue=2 Then
  68.  strValueName = "Name"
  69.  objReg.GetStringValue HKLM,strKeyPath & "\" & subkey & "\" & "Connection" ,strValueName,strValue
  70.  Exit For
  71. End If
  72. Next
  73. GetWirlessName=strValue
  74. End Function
  75. ' Subroutine to disable wireless connection
  76. Sub DisableWireless (strNetConn)
  77. Dim oConnections
  78. dim objShell
  79. Dim objConnections,objConn
  80. Dim strDisable
  81. Dim objNetwork
  82. Dim objDisable
  83. Dim objVerb
  84. Const NETWORK_CONNECTIONS = &H31&
  85. strDisable = "Disa&ble"
  86. Set objShell = CreateObject("Shell.Application" )
  87. Set objConnections = objShell.Namespace(NETWORK_CONNECTIONS)
  88. For Each objConn In objConnections.Items
  89. If objConn.Name = strNetConn Then
  90.  Set objNetwork = objConn
  91.  Exit For
  92. End If
  93. Next
  94. Set objDisable = Nothing
  95. For Each objVerb in objNetwork.verbs
  96. If objVerb.name = strDisable Then
  97.  Set objDisable = objVerb
  98.  Exit For
  99. End If
  100. Next
  101. objDisable.DoIt
  102. WScript.Sleep 1000
  103. End Sub
  104. 'Function to enable wireless connection , you can combone these two subtoutines into one
  105. ' but I prefer to seperate them just for simplicity
  106. Sub EnableWireless (strNetConn)
  107. Dim oConnections
  108. dim objShell
  109. Dim objConnections,objConn
  110. Dim strEnable
  111. Dim objNetwork
  112. Dim objEnable
  113. Dim objVerb
  114. Const NETWORK_CONNECTIONS = &H31&
  115. strEnable = "En&able"
  116. Set objShell = CreateObject("Shell.Application" )
  117. Set objConnections = objShell.Namespace(NETWORK_CONNECTIONS)
  118. For Each objConn In objConnections.Items
  119. If objConn.Name = strNetConn Then
  120. Set objNetwork = objConn
  121. Exit For
  122. End If
  123. Next
  124. Set objEnable = Nothing
  125. ' Enable NIC
  126. For Each objVerb in objNetwork.verbs
  127. If objVerb.name = strEnable Then
  128.  Set objEnable = objVerb
  129.  Exit For
  130. End If
  131. Next
  132. objEnable.DoIt
  133. WScript.Sleep 1000
  134. End Sub


 
Je ne vois pas ce qui fait que ca marche sur l'un mais pas l'autre...  
 
Je vous remercie par avance pour m'aider à résoudre ce problème.


Message édité par Matteu le 11-03-2015 à 18:58:23

---------------
Mon Feedback---Mes ventes
Reply

Marsh Posté le 10-03-2015 à 16:58:29   

Reply

Marsh Posté le 10-03-2015 à 19:58:47    

t'as quoi comme erreur sur celui qui marche pas ?

Reply

Marsh Posté le 10-03-2015 à 22:17:57    

Accessoirement la balise spoiler n'est pas adapté au code, tu pourrais utiliser cpp ou fixed à la place de spoiler ?
Merci :o
 
Après ta variable strKeyPath est la même sur les 2 modèles de portable ?


---------------
Grippe ? Coronavirus ? Portez votre masque correctement ! :D
Reply

Marsh Posté le 10-03-2015 à 22:50:50    

Aucune erreur quand j exécute manuellement le script il se passe rien  
 
Bardiel tu me parles chinois pour la variable la je suis une bille en vbs et j édite demain car en effet pas joli le spoiler


---------------
Mon Feedback---Mes ventes
Reply

Marsh Posté le 11-03-2015 à 07:41:53    

Quand je vois ton code je lis :

strKeyPath="SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}"


Or tu fais appel dans la base de registre à un contrôle bien particulier.
A mon avis, ouvres ta base de registre et regardes du côté de cela si sur la machine où ça ne fonctionne pas, tu as la même clé.
 
A titre perso plutôt que d'aller voir dans la base de registre, j'utilise la méthode devcon (nécessite une élévation des droits par contre).
A tester, la méthode netsh [:spamatounet]


---------------
Grippe ? Coronavirus ? Portez votre masque correctement ! :D
Reply

Marsh Posté le 11-03-2015 à 08:09:37    

C'est compliqué tout ça.
Moi je passerai par du netsh.
 
A voir aussi si le BIOS des PCs n'a pas cette option.

Reply

Marsh Posté le 11-03-2015 à 18:57:41    

bardiel oui elle existe bien la cle sur le pc sur lequel ca ne fonctionne pas j'avais regardé aussi ca justement !
 
le netsh tu ferais quoi ?
parce que le but, c'est pas de faire double cliquer l'utilisateur pour qu'il se connecte en wifi ou en ethernet, c'est qu'il faut vraiment que ca se fasse de maniere transparente.
 
En gros, chaque fois que quelqu'un revient d'une reunion, il se retrouve en wifi + ethernet des qu'il se plug sur le dock...  
donc le but est d'éviter ca.
 
Donc il faut que ce soit quelque chose qui prenne pas 1 mois a mettre en place si possible et de plus que la solution ne demande pas une réorganisation de la gestion des postes (ajout d'un compte admin ou autre).


---------------
Mon Feedback---Mes ventes
Reply

Marsh Posté le 11-03-2015 à 20:16:46    

Tu regardes le nom de ton interface WiFi avec :

netsh int ip sh ip


puis tu la désactives avec :

netsh int set int name="<nom_de_la_carte>" admin=disabled


Pour la réactiver :

netsh int set int name="<nom_de_la_carte>" admin=enabled


Par contre je ne sais pas si c'est du niveau "administrateur" ou même "utilisateur avec pouvoirs" [:spamatounet]  
 
Après vu ça, à chercher aussi si ça ne peut pas se faire en script.


---------------
Grippe ? Coronavirus ? Portez votre masque correctement ! :D
Reply

Marsh Posté le 11-03-2015 à 22:36:08    

Le lien est exactement ce que je ne veux pas
Ça ne répond pas a mon besoin car les deux cartes sont actives
Le but étant de ne pas saturer les baux wifi ainsi qu accroître la sécurité
 
Les commandes que tu cites ça pas de soucis j y suis tombé dessus le problème c est que ça obligerait a faire deux script et que l utilisateur clique dessus ce qui ne répond pas au besoin
Il faut que quand il se connecte en wifi ça désactive la carte mais comment surveiller justement l état de la carte ethernet car en gros c est si ethernet est en statut connecte alors désactiver wifi


---------------
Mon Feedback---Mes ventes
Reply

Marsh Posté le 12-03-2015 à 07:54:50    

As-tu lu mon message (tips : la dernière phrase) ?
 
Sans cela, soit tu sais scripter et avec netsh tu vas t'en sortir rapidement.
Soit tu ne sais pas et ca va être dur.

Reply

Marsh Posté le 12-03-2015 à 07:54:50   

Reply

Marsh Posté le 12-03-2015 à 13:05:04    

Matteu a écrit :

Aucune erreur quand j exécute manuellement le script il se passe rien  
 
Bardiel tu me parles chinois pour la variable la je suis une bille en vbs et j édite demain car en effet pas joli le spoiler


 
commente la première ligne sinon tu ne verras pas les erreurs s'afficher.

Reply

Marsh Posté le 12-03-2015 à 13:07:56    

oui dsl le but est aussi d'eviter de passer sur tous les postes.
Mais dans tous les cas, non ils n'ont malheureusement pas l'option tous .
Surement les derniers modeles mais pas les autres.

 

je ne sais pas scripter non...
mais apparement ce serait avec netsh donc ?

 

le principe du programme serait :

 

boucle
   si la connexion ethernet est active, desactiver wifi.
fin boucle

 


parce que c'est juste ca au final, si il y a que le wifi c'est bon, mais si il y a les 2 faut desactiver le wifi.

 

Apres la boucle infinie, c'est pas une bonne idée ca va tout planter, mais faut quand meme que ce soit un script qui tourne en permanence et qui check au moins toutes les 5/10sec si la connexion ethernet est active.


Message édité par Matteu le 12-03-2015 à 13:08:36

---------------
Mon Feedback---Mes ventes
Reply

Marsh Posté le 12-03-2015 à 13:55:49    

Mais tu vas devoir passer sur tous tes postes.
 
La question est de savoir si tu vas devoir y passer physiquement ou non :
http://en.community.dell.com/techc [...] /wiki/2545

Reply

Marsh Posté le 12-03-2015 à 14:02:52    

Perso à chaque fois que je l'ai fait c'est via l'option du bios présent sur les laptop qu'on achetait (entre autre spécialement pour ça).
 
Après le script que tu montres a les bonnes bases mais bon il est trop simpliste vu qu'il va lister toutes les connexions et prendre la dernière qu'il a détecté en wifi et donc potentiellement pas la bonne carte ...
Le netsh fait exactement pareil que le script, dans un cas c'est une commande dans l'autre c'est wmi mais c'est identique au final.
 
Dans tous les cas faut être admin.
Ma méthode alternative serait :
un script qui active/désactive le wifi
Une tache planifiée sur l'event connexion et déconnexion réseau qui lance le script avec le compte système
 
Autre solution :
un script lancé par un service ou un service qui fait tout le job lancé en compte système qui s'occuppe du job.
 
Après c'est souvent casse gueule dès que tu montes des cartes réseaux virtuelles pour hyper-v, vmware workstation, que tu branches un dongle wifi en plus etc.

Reply

Marsh Posté le 12-03-2015 à 14:14:44    

Perso, par script, à mon sens, il faut normaliser les noms des connexions filaire et WIFI.
Ca fait ça de moins à gérer, surtout que la détection de la bonne interface peut-être effectivement compliquée.

Reply

Marsh Posté le 12-03-2015 à 14:29:04    

Reply

Marsh Posté le 12-03-2015 à 22:27:00    

pas con du tout du tout le cou de la tache planifié en fonction d'un évènement !
c'est même quelque chose dont je regrette de pas avoir penser tout seul :)
 
je vais essayer de prendre le temps demain pour tester voir :) couplé à du netsh donc


---------------
Mon Feedback---Mes ventes
Reply

Marsh Posté le 07-04-2015 à 18:52:54    

bon alors au final, j'ai essayer en local avec un script basé sur les evenements de l'observateur ca marche plutot bien par contre, en GPO je n'y arrive pas...
 
je suis passé par les gpp :
 
copie du fichier de script pour desactiver le wifi sur c:\script ->OK
copie du fichier de script pour desactiver le lan sur c:\script ->OK
création de 2 taches planifié -> la ca va pas !
 
les taches planifiés n'apparaissent pas sur le poste client.
 
l'os utilisé est 2008r2  
j'ai bien coché tout ce qui est autorisation maximale etc. je comprends pas pourquoi ca ne descend pas...


---------------
Mon Feedback---Mes ventes
Reply

Marsh Posté le 08-04-2015 à 16:51:16    

Up pls


---------------
Mon Feedback---Mes ventes
Reply

Marsh Posté le 14-04-2015 à 17:26:53    

ligne 18 du VBS, il recherche une connexion réseau du type : "Local Area Connection" alors que si ton OS est en français, ta connexion sera du type "Connexion au réseau local".
 
Pour vérifier tes états ajoute les lignes en 38,39:  
wscript.echo "WireStatus = " & wireStatus
wscript.echo "WifiStatus = " & wifiStatus
 
il faut que les états soient non vides (soit true, soit false)
 

Reply

Marsh Posté le 14-04-2015 à 17:42:54    

et aussi en ligne 112 et 149, il faut tu remplaces par les mots français :
strDisable = "&Désactiver"
strEnable = "&Activer"

Reply

Marsh Posté le 14-04-2015 à 18:11:35    

je suis parti sur la solution des taches planifiés plutot qui me semble plus propre non ?

 

surtout que le script marche sur un pc et pas un autre donc il me semblait pas "non fonctionnel" car le langage est francais dans les 2 cas


Message édité par Matteu le 14-04-2015 à 22:58:35

---------------
Mon Feedback---Mes ventes
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed