在 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