Windowsの接続名("ローカル エリア接続"とか)はいい加減!
サーバにはNIC(Network Interface Card)が複数付いているのが当たり前である。WindowsのNICには、通常 "ローカル エリア接続"、"ローカル エリア接続 2"…という具合に自動的に連番の接続名(NetConnectionID)が付けられるが、この名前付けはどうもランダムに行われているようで、まったく同じ構成のサーバでも、違う名前が付いたりすることがよくある。
一方、NICのデバイス名(デバイス マネージャーやコントロールパネルで見えるやつ)はブレることがまずない。
例えば最近のHPのサーバで、NICがNC382iの場合、デバイス名は1番ポートから順に
- HP NC382i DP Multifunction Gigabit Server Adapter
- HP NC382i DP Multifunction Gigabit Server Adapter #2
- HP NC382i DP Multifunction Gigabit Server Adapter #3
- …
どのNICがどの接続名になっているのかを知るにはコントロールパネルを見ればいい。デバイス名と接続名が両方表示される。
Figure.1 コンパネで接続名とデバイス名を見る |
しかし、同じ構成のサーバを何十台、何百台と構築する場合、いちいち目視で確認などしていられない。
(実際には本番環境のサーバはチーミングを組む事が多いが、ここでは横においておく)。
VBScriptを使って、デバイス名をキーに接続名を調べてみる
以下は、WMIを使ってデバイス名から接続名を調べるVBScriptである。
引数にデバイス名を与えると、対応する接続名が表示される。
' GetNetConnectionIDfromAdapterName.vbs ' Get Network Adapter Name and NetConnectionID ' 2011.12.17 dsp74118 option explicit Function GetNetConnectionID(adapterName) dim computer dim wmiService dim netAdapter dim netAdapters dim targetConnectionID computer = "." GetNetConnectionID = "Not Found" set wmiService = GetObject("winmgmts:\\" & computer & _ "\root\CIMV2") set netAdapters = wmiService.ExecQuery( _ "SELECT * FROM Win32_NetworkAdapter") For Each netAdapter in netAdapters if netAdapter.Name = adapterName then GetNetConnectionID = _ netAdapter.NetConnectionID exit for end if Next End Function ' main dim adapterName dim connectionID adapterName = WScript.Arguments.Item(0) connectionID = GetNetConnectionID(adapterName) WScript.Echo adapterName & " = " & connectionID
Figure.2 実行例 |
これで任意のNICの接続名を取得することに成功したので、後は
Dim wshShell set wshShell = WScript.CreateObject("Wscript.Shell") wshShell.run("netsh -c interface set interface name=""" & _ connectionID & """ newname=""ServiceLan""")とかやって接続名を変更してみたり、
wshShell.run("netsh interface ip set address """ & _ connectionID & """ static " & _ "192.168.0.108 255.255.255.0 192.168.0.1 1")とかやってIPアドレスを変更してみたりなど、やりたい放題。
実はPowerShellだと…
PowerShellにはGet-WmiObjectというコマンドがあって、同じ事がもう少し簡単に(かつカッコよく)できたりする。
PowerShellでIPアドレスを変更してみる
$nicconf = Get-WmiObject win32_networkadapterconfiguration | Where-Object {$_.Description -eq "デバイス名"} $nicconf.EnableStatic("192.168.0.108","255.255.255.0") $nicconf.SetGateways("192.168.0.1") $DNSServers = "192.168.0.1","8.8.8.8" $nicconf.SetDNSServerSearchOrder($DNSServers)
PowerShellで接続名を変更してみる
$nic = Get-WmiObject Win32_NetworkAdapter | Where-Object {$_.Name -eq "デバイス名"} $nic.NetConnectionID = "ServiceLan" $nic.Put()やはり、これからの時代はPowerShell使いになるしかないな。
0 コメント:
コメントを投稿