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

  • 質問

  • 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の情報を結びつける方法はないでしょうか。

    2016年2月7日 5:48

すべての返信

  • 試せていないですが、InterfaceIndexが一致する物を探すというのはどうでしょうか?
    2016年2月7日 12:04
  • 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
    2016年2月7日 13:55
  • 適当に書いてみましたがこんなもんですかねぇ?

    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
    2016年2月8日 1:20
  • コードまで書いて頂きありがとうございます。

    頂いたコードはIPアドレスからアダプタ名を取得する物でその逆のやり方が知りたかったのですが、

    MicrosoftのWin32_NetworkAdapterSettingクラスのページにそのやり方がサンプルとして乗っておりましたので本件は無事解決致しました。

    2016年2月9日 9:11
  • 私は質問文通り「情報を結びつける方法」について回答しました。質問文に書かれていない内容には答えようがありません。
    2016年2月10日 1:11
  • チャブーンです。

    とりあえず、解決してよかったですね。このような場合のお願いなのですが、「どのように解決したのか」の具体例を教えていただけると、コミュニティとして大変助かります(後から見に来る方へ利益になります)。

    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アドレスを設定するのに

    と冒頭に書いてあるので、背景情報から質問を読み取ってほしいという願いが込められていたのかも...。難易度高い解釈だとは思います。


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。



    2016年2月10日 3:09
  • 私の質問文が分かりにくかった事をお詫びいたします。

    このフォーラムでのしきたりをご教授頂き有難うございます。

    2016年2月10日 9:45