「ローカル エリア接続」の有効・無効をコマンドラインから制御するメモ

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コマンドで出来れば良いのになと思う今日この頃。