「ローカル エリア接続」の有効・無効をコマンドラインから制御するメモ
Windows Server 2003であれば以下で出来るらしい。がWindowsXPでは出来ない。
>netsh interface set interface "ローカル エリア接続" enabled >netsh interface set interface "ローカル エリア接続" disable
XPの場合は…
>netsh interface set interface "ローカル エリア接続" disable 必要なパラメータが指定されていません このコマンドの構文が無効です。ヘルプで正しい構文を参照してください。 使用法 set interface [name = ] IfName [ [admin = ] ENABLED|DISABLED [connect = ] CONNECTED|DISCONNECTED [newname = ] NewName ] インターフェイスのパラメータを設定します。 IfName - インターフェイス名 admin - インターフェイスを有効にするかどうかを指定します (LAN 以外の場合のみ)。 connect - インターフェイスに接続するかどうかを指定します (LAN 以外の場合のみ)。 newname - インターフェイスの新しい名前 (LAN の場合のみ) 説明: - 名前以外のオプションを少なくとも 1 つ指定しなければなりません。 - connect = CONNECTED が指定された場合は、admin = DISABLED オプションが指定されていてもインターフェイスは自動的に有効に なります。
うーん…
正しいと思われる以下の構文を入力してみる。
>netsh interface set interface "ローカル エリア接続" disable disconnect "ローカル エリア接続 専用インターフェイスは、接続または切断できません。有効または無効にすることもできません。 この関数を完了できません。
結局XPでは無理っぽい。で、色々ググッてみたら、ここ(http://pc11.2ch.net/test/read.cgi/win/1176558776/213-217)の217さんがVBScriptで実現している。
正直な所、BasicはN88Basicで止まってるからVBScriptなんて見たこともなかったんだが、なんとなく分かるので、利用させてもらう。ネタ元はどこだろう? ありがとうございます。
Const ssfCONTROLS = 3 Const sConPaneName = "ネットワーク接続" Const sConnectionName = "ローカル エリア接続" Const sDisableVerb = "無効にする(&B)" Const sEnableVerb = "有効にする(&A)" set shellApp = createobject("shell.application") set oControlPanel = shellApp.Namespace(ssfCONTROLS) set oNetConnections = nothing for each folderitem in oControlPanel.items if folderitem.name = sConPaneName then set oNetConnections = folderitem.getfolder: exit for end if next if oNetConnections is nothing then 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 wscript.quit end if for each verb in oLanConnection.verbs if verb.name = sDisableVerb then verb.Doit WScript.Sleep 2000 end if next
コメントの入れ方も知らないからみにくいことこの上ないんだけど、なんとなく解説。
最初のshellApp.Namespace()でコントロールパネルの何かを引っ張ってきて、次のfor eachで、『ネットワーク接続』フォルダーを検索してる。もし『ネットワーク接続』フォルダが見つからなかった場合(oNetConnections is nothingが真)はスクリプトを終了。
見つかった場合はfor each folderitem in oNetConnections.itemsで、『ネットワーク接続』フォルダ内のアイテムを順に調べ、sConnectionName(="ローカルエリア接続")に一致するものを調べている。やはり見つからなかったら、スクリプトを終了。
最後にfor each verb in oLanConnection.verbs でたぶん(確証はない)右クリックメニューで表示される項目とsDisableVerb(="無効にする(&B)")が一致するか調べている。
一致したら、verb.Doitで実行。すなわち無効にしている。
if verb.name = sDisableVerb then のsDisableVerbをsEnableVerbに変更すれば、ローカル エリア接続を有効化するスクリプトになる。
このスクリプトを有効もしくは無効のどちらか用に書き換え、『適当な名前.vbs』で保存してコマンドラインから実行すれば、『ローカル エリア接続』をコマンドラインから制御できるようになる。
こんなことしなくても、netshコマンドで出来れば良いのになと思う今日この頃。