Windows – WIN32_NetworkAdapterConfiguration does not report IP from PPP adapter

ipconfigwindows 7wmi

On a Windows 7 device, the following WMI query does not report back an enabled PPP adapter:

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

Where ipconfig gives you all the information correctly:

Windows IP Configuration

PPP adapter XYZ VPN:

Connection-specific DNS Suffix . :
IPv4 Address. . . . . . . . . . . :
123.456.789.123
Subnet Mask . . . . . . . . . . . : 255.255.255.255
Default Gateway . . . . . . . . . :
0.0.0.0

Wireless LAN adapter Wireless Network
Connection:

Connection-specific DNS Suffix . :
IPv4 Address. . . . . . . . . . . :
192.168.178.11
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :
192.168.178.1

Ethernet adapter Local Area Connection
3:

Media State . . . . . . . . . . . :
Media disconnected
Connection-specific DNS Suffix . :

Any ideas how I can script this by using WMI or VBS?

Best Answer

This is a bug that was present in Vista and hasn't gotten fixed through Windows 7 or Windows 8.

You must use either .NET or C++ APIs to get this information. I think the easiest thing to do is to use Powershell with .NET:

$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 ""
}

See the NetworkInterface class documentation for information on using that .NET class with C#, VB, or C++.

Related Question