WIN32_NetworkAdapterConfiguration 不报告 PPP 适配器的 IP

WIN32_NetworkAdapterConfiguration 不报告 PPP 适配器的 IP

在 Windows 7 设备上,以下 WMI 查询不会报告已启用的 PPP 适配器:

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

在哪里ipconfig正确地为您提供所有信息:

Windows IP 配置

PPP 适配器 XYZ VPN:

连接特定的 DNS 后缀 . : IPv4 地址 . . . . . . . . . . . . . : 123.456.789.123
子网掩码 . . . . . . . . . . . . : 255.255.255.255 默认网关
. . . . . . . . . : 0.0.0.0

无线局域网适配器无线网络连接:

连接特定的 DNS 后缀 . : IPv4 地址 . . . . . . . . . . . . . . : 192.168.178.11
子网掩码 . . . . . . . . . . . . . : 255.255.255.0
默认网关 . . . . . . . . . . . : 192.168.178.1

以太网适配器本地连接 3:

媒体状态 . . . . . . . . . . . . : 媒体已断开
连接特定于连接的 DNS 后缀 . :

有什么想法我可以使用 WMI 或 VBS 来编写脚本吗?

答案1

这是一个漏洞该问题在 Vista 中就已存在,并且尚未通过 Windows 7 或 Windows 8 得到修复。

您必须使用 .NET 或 C++ API 来获取此信息。我认为最简单的方法是将 Powershell 与 .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 ""
}

NetworkInterface 类文档有关将该 .NET 类与 C#、VB 或 C++ 一起使用的信息。

答案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

相关内容