質問者
VBS で「ローカルエリア接続」といったアダプタ名でアダプタを指定しIPアドレスを設定する方法

質問
-
VBS で「ローカルエリア接続」といったアダプタ名からIPアドレスを設定するのにWin32_NetworkAdapterConfigurationオブジェクトでIPアドレスを設定できるところまではわかりました。
しかし「ローカルエリア接続」という名前のアダプタがコレクションのどれかが特定できない状態です。
Win32_NetworkAdapterであれば「ローカルエリア接続」といった名前からアダプタの情報が引き出せると様ですがWin32_NetworkAdapterではIPアドレスが設定できません。
Win32_NetworkAdapterとWin32_NetworkAdapterConfigurationの情報を結びつける方法の一つにmacアドレスが同じものを選ぶという方法もありますがアダプタが無効になっているものはmacアドレスが取れない状態です。
ネットワーク管理者が指定したIPアドレスに変更してからアダプタを有効にしないとセキュリティでそのPCのネットワーク接続がブロックされてしまいますのでmacアドレスで一致させる方法は現在使えなさそうです。
アダプタが無効になっていてもWin32_NetworkAdapterでmacアドレスを取得できる方法やその他にWin32_NetworkAdapterとWin32_NetworkAdapterConfigurationの情報を結びつける方法はないでしょうか。
すべての返信
-
WMIおよびその基になっているCIMにはassociationという概念があります。今回の例でいうとWin32_NetworkAdapterSettingクラスがWin32_NetworkAdapterクラスとWin32_NetworkAdapterConfigurationクラスとを関連付けています。
PowerShellですと
Get-CimInstance Win32_NetworkAdapterConfiguration |% { $_.IPAddress, (Get-CimAssociatedInstance -Association Win32_NetworkAdapterSetting $_).NetConnectionID }
とやるとWin32_NetworkAdapterConfigurationに関連付いているWin32_NetworkAdapterが得られるので、これで「ローカルエリア接続」と「IPアドレス」のペアになります。
# VBSではどう書くんだっけ…?
- 回答の候補に設定 佐祐理 2016年2月10日 1:10
-
適当に書いてみましたがこんなもんですかねぇ?
Set wmi = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") Set networkAdapterConfigurations = wmi.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration") For Each networkAdapterConfiguration in networkAdapterConfigurations Set networkAdapters = wmi.ExecQuery("ASSOCIATORS OF {Win32_NetworkAdapterConfiguration.Index='" & networkAdapterConfiguration.Index & "'} WHERE AssocClass=Win32_NetworkAdapterSetting") For Each networkAdapter in networkAdapters WScript.Echo "name: " & networkAdapter.NetConnectionID WScript.Echo "ip:" If networkAdapterConfiguration.IPEnabled Then For Each ipaddress in networkAdapterConfiguration.IPAddress WScript.Echo " " & ipaddress Next Else WScript.Echo " disabled" End If Next Next
- 回答の候補に設定 佐祐理 2016年2月10日 1:10
-
チャブーンです。
とりあえず、解決してよかったですね。このような場合のお願いなのですが、「どのように解決したのか」の具体例を教えていただけると、コミュニティとして大変助かります(後から見に来る方へ利益になります)。
https://msdn.microsoft.com/en-us/library/windows/desktop/aa394218(v=vs.85).aspx
<引用>(※本来はご自分が書かれたスクリプトを公開いただけると助かります)
strComputer = "." Set objWMIService = GetObject( _ "winmgmts:\\" & strComputer & "\root\cimv2") Set colNics = objWMIService.ExecQuery _ ("Select * From Win32_NetworkAdapter " _ & "Where NetConnectionID = " & _ "'Local Area Connection'") For Each objNic in colNics Set colNicConfigs = objWMIService.ExecQuery _ ("ASSOCIATORS OF " _ & "{Win32_NetworkAdapter.DeviceID='" & _ objNic.DeviceID & "'}" & _ " WHERE AssocClass=Win32_NetworkAdapterSetting") For Each objNicConfig In colNicConfigs For Each strIPAddress in objNicConfig.IPAddress Wscript.Echo "IP Address: " & strIPAddress Next Next Next
あとどうでもいい話しですが、
VBS で「ローカルエリア接続」といったアダプタ名からIPアドレスを設定するのに
と冒頭に書いてあるので、背景情報から質問を読み取ってほしいという願いが込められていたのかも...。難易度高い解釈だとは思います。
フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。
- 編集済み チャブーンMVP 2016年2月10日 3:12