Question

Je dois activer / désactiver complètement les interfaces réseau à partir d'un script sous Windows XP. Je cherche une solution python, mais tout moyen général (par exemple, WMI, une ligne de commande à la netsh, un appel à Windows) est le bienvenu et sera ajusté. Merci.

Était-ce utile?

La solution

Utilisation de l'interface netsh Usage set interface [name =] IfName             [[admin =] ENABLED | DÉSACTIVÉ               [connect =] CONNECTED | DISCONNECTED               [newname =] NewName]

Essayez de tout inclure à l'intérieur des crochets extérieurs: netsh interface set interface name = " thename " admin = désactivé connect = DISCONNECTED newname = "thename"

Voir aussi cette page MS KB: http://support.microsoft.com/kb/262265/ Vous pouvez suivre l'une de leurs suggestions. Pour désactiver l'adaptateur, vous devrez déterminer un moyen de référencer le périphérique matériel. S'il n'y a pas plusieurs adaptateurs portant le même nom sur l'ordinateur, vous pouvez éventuellement désactiver la description de l'interface (ou l'ID PCI fonctionne bien). Après cela, utilisez devcon (disable | enable). Devcon est une interface de console complémentaire pour le gestionnaire de périphériques.

Autres conseils

Jusqu'à présent, j'ai trouvé la solution Python suivante:

>>> import wmi; c=wmi.WMI()
>>> o=c.query("select * from Win32_NetworkAdapter where NetConnectionID='wifi'")[0]
>>> o.EnableDevice(1)
(-2147217407,)

qui est traduit, AFAIU, en erreur générique WMI 0x80041001. Pourrait être des autorisations.

J'ai trouvé ce script .VBS sur Internet. Il a le grand avantage de fonctionner sur des machines sur lesquelles je ne parviens pas à faire fonctionner NETSH à cette fin.

Const ssfCONTROLS = 3 

sConnectionName = "Local Area Connection" 

sEnableVerb = "En&able" 
sDisableVerb = "Disa&ble" 

set shellApp = createobject("shell.application") 
set oControlPanel = shellApp.Namespace(ssfCONTROLS) 

set oNetConnections = nothing 
for each folderitem in oControlPanel.items 
  if folderitem.name = "Network Connections" then 
        set oNetConnections = folderitem.getfolder: exit for 
end if 
next 

if oNetConnections is nothing then 
msgbox "Couldn't find 'Network Connections' folder" 
wscript.quit 
end if 

set oLanConnection = nothing 
for each folderitem in oNetConnections.items 
if lcase(folderitem.name) = lcase(sConnectionName) then 
set oLanConnection = folderitem: exit for 
end if 
next 

if oLanConnection is nothing then 
msgbox "Couldn't find '" & sConnectionName & "' item" 
wscript.quit 
end if 

bEnabled = true 
set oEnableVerb = nothing 
set oDisableVerb = nothing 
s = "Verbs: " & vbcrlf 
for each verb in oLanConnection.verbs 
s = s & vbcrlf & verb.name 
if verb.name = sEnableVerb then 
set oEnableVerb = verb 
bEnabled = false 
end if 
if verb.name = sDisableVerb then 
set oDisableVerb = verb 
end if 
next 

'debugging displays left just in case... 
' 
'msgbox s ': wscript.quit 
'msgbox "Enabled: " & bEnabled ': wscript.quit 

'not sure why, but invokeverb always seemed to work 
'for enable but not disable. 
' 
'saving a reference to the appropriate verb object 
'and calling the DoIt method always seems to work. 
' 
if bEnabled then 
' oLanConnection.invokeverb sDisableVerb 
oDisableVerb.DoIt 
else 
' oLanConnection.invokeverb sEnableVerb 
oEnableVerb.DoIt 
end if 

'adjust the sleep duration below as needed... 
' 
'if you let the oLanConnection go out of scope 
'and be destroyed too soon, the action of the verb 
'may not take... 
' 
wscript.sleep 1000

Il semble impossible de trouver une API de base permettant de contrôler les interfaces sur MSDN, mis à part les API RAS, mais je ne pense pas qu'elles s'appliquent aux connexions sans accès à distance. Comme vous le suggérez, netsh est peut-être une option. Il est supposé avoir une interface de programmation: http://msdn.microsoft.com/en-us/library/ms708353 (VS.85) .aspx

Si vous voulez être un pur Python, vous pouvez éventuellement ouvrir un ensemble de canaux pour communiquer avec un processus netsh.

c'est VB.Net

Dim objectQuery As New ObjectQuery("SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionId IS NOT NULL")
         Dim searcher As New ManagementObjectSearcher(scope, objectQuery)
         Dim os As ManagementObject
         Dim moColl As ManagementObjectCollection = searcher.Get()
         Dim _list As String = ""
         For Each os In moColl
             Console.WriteLine(os("NetConnectionId"))
         Next os

Cela aura toutes les interfaces sur votre ordinateur. Ensuite, vous pouvez utiliser netsh pour le désactiver.

  

interface de jeu d'interface netsh    DÉSACTIVÉ

L’outil devcon peut contrôler la carte réseau, mais pas directement l'interface. C'est une version en ligne de commande de l'applet Gestionnaire de périphériques.

devcon disable (id or portion of name)
devcon enable (id or portion of name)

Vous devrez peut-être utiliser WMI. Cela peut servir de bon point de départ: http://msdn.microsoft.com/en-us/library/aa394595. aspx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top