Wie programm aktivieren / deaktivieren Netzwerk-Schnittstellen? (Windows XP)
-
01-07-2019 - |
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.
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