Frage

Ich brauche zu aktivieren / deaktivieren vollständig Netzwerk-Schnittstellen von einem Skript in Windows XP. Ich suche nach einem Python-Lösung, aber eine allgemeine Art und Weise (zB WMI, einige Kommandozeilen à la netsh, einige Fenster nennen) ist willkommen und wird angepasst. Danke.

War es hilfreich?

Lösung

Mit der netsh interface Nutzungs Set-Schnittstelle [name =] ifname             [[Admin =] enabled | GESPERRT               [Connect =] CONNECTED | DISCONNECTED               [Newname =] NewName]

Versuchen einschließlich alles innerhalb der äußeren Klammern: netsh interface set interface name = "theName" admin = disabled connect = DISCONNECTED newname = "theName"

Siehe auch diese MS KB Seite: http://support.microsoft.com/kb/262265/ Sie könnten entweder ihre Vorschläge folgen. Für den Adapter zu deaktivieren, müssen Sie einen Weg, um zu bestimmen, das Hardware-Gerät zu verweisen. Wenn es nicht mehrere Adapter mit dem gleichen Namen auf dem Computer sein, könnten Sie möglicherweise für die Schnittstelle aus der Beschreibung gehen (oder PCI-ID funktioniert gut). Danach wird mit devcon (disable | enable). Devcon ist eine Add-on-Konsole-Schnittstelle für die Geräte-Manager.

Andere Tipps

Bisher habe ich die folgende Python-Lösung gefunden:

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

, das übersetzt wird, AFAIU, den Ober WMI-Fehler 0x80041001. Könnte Berechtigungen sein.

Ich fand das Skript vbs im Internet. Es hat den Vorteil, kühlt tatsächlich arbeitet an Maschinen, bei denen ich nicht NETSH bekommen kann zu diesem Zweck zu arbeiten.

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

Ich kann keine grundlegende API scheinen auf MSDN zur Steuerung Schnittstellen zu finden, abgesehen von der RAS-API, aber ich glaube nicht, dass sie zu nicht-Wählverbindungen gelten. Wie Sie selbst vorschlagen, könnte netsh eine Option sein, angeblich hat es auch eine programmatische Schnittstelle: http://msdn.microsoft.com/en-us/library/ms708353 (VS.85) aspx

Wenn Sie reinen Python sein wollen, können Sie vielleicht einen Satz von Rohren öffnen mit einem netsh Prozess zu kommunizieren.

Das ist 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

Das wird alle Schnittstellen auf Ihrem Computer erhalten. Dann können Sie netsh tun, um es zu deaktivieren.

  

netsh interface set interface    GESPERRT

Das devcon Tool kann die NIC steuern, aber nicht direkt die Schnittstelle. Es ist eine Kommandozeilen-Version des Geräte-Manager-Applets.

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

Unter Umständen müssen Sie WMI verwenden. Dies kann als ein guter Ausgangspunkt dienen: http://msdn.microsoft.com/en-us/library/aa394595. aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top