ネットワーク インターフェイスをプログラムで有効/無効にするにはどうすればよいですか?(Windows XP)

StackOverflow https://stackoverflow.com/questions/83756

  •  01-07-2019
  •  | 
  •  

質問

Windows XP のスクリプトからネットワーク インターフェイスを完全に有効または無効にする必要があります。私はPythonのソリューションを探していますが、一般的な方法(たとえば、WMI、netshのコマンドライン、Windowsコールなど)は歓迎されており、調整されます。ありがとう。

役に立ちましたか?

解決

NetSHインターフェイスの使用インターフェイスを使用します[name =] ifname [[admin =] enabled | disabled [connect =] connected | disconnected [newname =] newName

外側の括弧内にすべてを含めてみてください。netsh インターフェイス セット インターフェイス名 = "名前" admin=disabled connect=切断 newname="名前"

この MS KB ページも参照してください。 http://support.microsoft.com/kb/262265/どちらの提案にも従うことができます。アダプターを無効にするには、ハードウェア デバイスを参照する方法を決定する必要があります。コンピュータ上に同じ名前のアダプタが複数存在しない場合は、インターフェイスの説明を省略できる可能性があります (または PCI ID が適切に機能します)。その後、devcon (無効|有効) を使用します。Devcon は、デバイス マネージャーのアドオン コンソール インターフェイスです。

他のヒント

これまでのところ、次の Python ソリューションを見つけました。

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

私の知る限り、これは一般的な WMI エラー 0x80041001 に変換されます。権限がある可能性があります。

この .VBS スクリプトをインターネットで見つけました。この目的のために NETSH を動作させることができないマシンでも実際に動作できるというすばらしい利点があります。

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

MSDN では、RAS API 以外にインターフェイスを制御するための基本的な API が見つからないようですが、非ダイヤルアップ接続には適用されないと思います。あなた自身が提案しているように、netsh がオプションになる可能性があります。おそらく、プログラムによるインターフェイスも備えています。 http://msdn.microsoft.com/en-us/library/ms708353(VS.85).aspx

純粋な Python になりたい場合は、一連のパイプを開いて netsh プロセスと通信することもできます。

これは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

これにより、コンピュータ上のすべてのインターフェイスが取得されます。次に、 netsh を実行して無効にすることができます。

NetSHインターフェイスセットインターフェイスが無効になっています

開発コン このツールは NIC を制御できますが、インターフェイスを直接制御することはできません。これは、デバイス マネージャー アプレットのコマンド ライン バージョンです。

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

WMI の使用が必要になる場合があります。これは良い出発点として役立つかもしれません。http://msdn.microsoft.com/en-us/library/aa394595.aspx

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top