web-dev-qa-db-ja.com

WIN32_NetworkAdapterConfigurationはPPPアダプターからのIPを報告しません

Windows 7デバイスでは、次のWMIクエリは、有効なPPPアダプターを報告しません:

Select Index,MACAddress,IPAddress,IPSubnet,DefaultIPGateway,DNSServerSearchOrder from Win32_NetworkAdapterConfiguration where IPEnabled=true

ipconfigは、すべての情報を正しく提供します。

WindowsIP構成

PPPアダプターXYZVPN:

接続固有のDNSサフィックス。 :IPv4アドレス。 。 。 。 。 。 。 。 。 。 。 :123.456.789.123
サブネットマスク 。 。 。 。 。 。 。 。 。 。 。 :255.255.255.255
デフォルトゲートウェイ 。 。 。 。 。 。 。 。 。 :0.0.0.0

無線LANアダプター無線ネットワーク接続:

接続固有のDNSサフィックス。 :IPv4アドレス。 。 。 。 。 。 。 。 。 。 。 :192.168.178.11
サブネットマスク 。 。 。 。 。 。 。 。 。 。 。 :255.255.255.0
デフォルトゲートウェイ 。 。 。 。 。 。 。 。 。 :192.168.178.1

イーサネットアダプタローカルエリア接続3:

メディアの状態。 。 。 。 。 。 。 。 。 。 。 :メディアが切断されました
接続固有のDNSサフィックス。 :

WMIまたはVBSを使用してこれをスクリプト化する方法はありますか?

4
Michael

これは バグ であり、Vistaに存在し、Windows7またはWindows8では修正されていません。

この情報を取得するには、.NETまたはC++ APIのいずれかを使用する必要があります。最も簡単な方法は、.NETでPowershellを使用することだと思います。

$nics = [System.Net.NetworkInformation.NetworkInterface]::GetAllNetworkInterfaces()
foreach ($nic in $nics) {
    write-Host $nic.name
    write-Host "MAC Address $($nic.GetPhysicalAddress)"
    $props = $nic.GetIPProperties()
    $addresses = $props.UnicastAddresses
    foreach ($addr in $addresses) {
        write-Host "IP Address: $($addr.Address.IPAddressToString)"
        write-Host "IPv4 Mask: $($addr.IPv4Mask.IPAddressToString)"
    }
    write-Host "Gateway: $($props.GatewayAddresses.Address.IPAddressToString)"
    write-Host "DNS Server(s): $($props.DnsAddresses.IPAddressToString)"
    write-Host ""
}

C#、VB、またはC++でその.NETクラスを使用する方法については、 NetworkInterfaceクラスのドキュメント を参照してください。

2
On Error Resume Next

strComputer= "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")

Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE")

For Each objItem In colItems
      strIPAddress = Join(objItem.IPAddress, ",")

      WScript.Echo "IPAddress: " & strIPAddress

Next
0
Michael