楼主息怒,用ipconfig命令输出,再用正则提取字符串,不能适应所有操作系统,操作系统语言,版本都会影响输出结果.
可以用其它方法得到,还更全面.
#include <Array.au3>
Global $aInfo = _NetworkAdapterInfo('')
_ArrayDisplay($aInfo)
Func _NetworkAdapterInfo($strComputer, $flag = False) ;true 显示绑定TCP/IP的适配器,false显示所有适配器
If Not $strComputer Then $strComputer = "localhost"
Local $colItems = ""
Local $colItem2 = ""
Local $objWMIService
Local $NetworkAdapterID = 0
Local $index = ""
Local $NetworkAdapterPNPDeviceID = ""
Local $NetworkAdapterName = ""
Local $NetworkAdapterGateway = ""
Local $NetworkAdapterHostName = ""
Local $NetworkAdapterDHCPEnabled = ""
Local $NetworkAdapterIPaddress = ""
Local $NetworkAdapterSubnet = ""
Local $NetworkAdapterDNSCount = ""
Local $NetworkAdapterMAC = ""
Local $NetworkAdapterNetConnectionID = ""
Local $NetConnectionStatus = ""
Local $NetworkAdapterInfo[1][14]
Local $remark = StringSplit('{AdapterIdentifier},网络适配器名称,设备范例ID,连接名称,连接状态,DNS主机名称,启用DHCP,IP地址,子网掩码,网关,MAC地址,DNS数量,主DNS', ',')
For $i = 0 To UBound($remark) - 1
$NetworkAdapterInfo[0][$i] = $remark[$i]
Next
Local $wbemFlagReturnImmediately, $wbemFlagForwardOnly
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$NetworkAdapterInfo[0][0] = 0
$objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $strComputer & "\root\CIMV2")
;~ $objWMIService = ObjGet("winmgmts:\\localhost\root\CIMV2")
If @error Then Return SetError(1, 0, False)
If $flag Then
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
$colItem2 = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionStatus >0', "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
Else
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
$colItem2 = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter', "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
EndIf
Local $colComputers = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
If IsObj($colItems) Then
For $objItem In $colItems
$index = $objItem.index
$NetworkAdapterName = $objItem.Description
$NetworkAdapterHostName = $objItem.DNSHostName
$NetworkAdapterDHCPEnabled = $objItem.DHCPEnabled
If IsArray($objItem.DefaultIPGateway) Then
$NetworkAdapterGateway = $objItem.DefaultIPGateway(0)
Else
$NetworkAdapterGateway = ''
EndIf
If IsArray($objItem.IPAddress) Then
$NetworkAdapterIPaddress = $objItem.IPAddress(0)
Else
$NetworkAdapterIPaddress = ''
EndIf
$NetworkAdapterDNSCount = UBound($objItem.DNSServerSearchOrder)
For $i = 0 To $NetworkAdapterDNSCount - 1
Assign('NetworkAdapterDNS' & $i, $objItem.DNSServerSearchOrder($i))
Next
If IsArray($objItem.IPSubnet) Then
$NetworkAdapterSubnet = $objItem.IPSubnet(0)
Else
$NetworkAdapterSubnet = ''
EndIf
$NetworkAdapterMAC = $objItem.MACAddress
$NetworkAdapterID += 1
ReDim $NetworkAdapterInfo[UBound($NetworkAdapterInfo, 1) + 1][UBound($NetworkAdapterInfo, 2)]
$NetworkAdapterInfo[0][0] = $NetworkAdapterID
$NetworkAdapterInfo[$NetworkAdapterID][0] = $index
$NetworkAdapterInfo[$NetworkAdapterID][1] = $objItem.settingID
$NetworkAdapterInfo[$NetworkAdapterID][2] = $NetworkAdapterName
$NetworkAdapterInfo[$NetworkAdapterID][6] = $NetworkAdapterHostName
$NetworkAdapterInfo[$NetworkAdapterID][7] = $NetworkAdapterDHCPEnabled
$NetworkAdapterInfo[$NetworkAdapterID][8] = $NetworkAdapterIPaddress
$NetworkAdapterInfo[$NetworkAdapterID][9] = $NetworkAdapterSubnet
$NetworkAdapterInfo[$NetworkAdapterID][10] = $NetworkAdapterGateway
$NetworkAdapterInfo[$NetworkAdapterID][11] = $NetworkAdapterMAC
$NetworkAdapterInfo[$NetworkAdapterID][12] = $NetworkAdapterDNSCount
For $i = 0 To $NetworkAdapterDNSCount - 1
If UBound($NetworkAdapterInfo, 2) <= ($i + 13 + 1) Then ReDim $NetworkAdapterInfo[UBound($NetworkAdapterInfo, 1)][$i + 13 + 1]
If $i > 0 Then $NetworkAdapterInfo[0][$i + 13] ='备用DNS ' & ($i)
$NetworkAdapterInfo[$NetworkAdapterID][$i + 13] = Eval("NetworkAdapterDNS" & $i)
Next
Next
EndIf
If IsObj($colItem2) Then
$NetworkAdapterID = 0
For $objItem2s In $colItem2
$NetworkAdapterNetConnectionID = $objItem2s.NetConnectionID
$NetworkAdapterPNPDeviceID = $objItem2s.PNPDeviceID
$DeviceID = $objItem2s.DeviceID
$NetConnectionStatus = $objItem2s.NetConnectionStatus
$NetworkAdapterID += 1
If UBound($NetworkAdapterInfo, 1) <= $NetworkAdapterID Then ReDim $NetworkAdapterInfo[$NetworkAdapterID + 1][UBound($NetworkAdapterInfo, 2)]
Local $find = _ArraySearch($NetworkAdapterInfo, $DeviceID, 1, 0, 0, 0, 1, 0)
If $find > -1 Then
$NetworkAdapterInfo[$find][3] = $NetworkAdapterPNPDeviceID
$NetworkAdapterInfo[$find][4] = $NetworkAdapterNetConnectionID
$NetworkAdapterInfo[$find][5] = $NetConnectionStatus
If Not (StringStripWS($NetworkAdapterInfo[$find][5], 8) == '') Then
If StringStripWS($NetworkAdapterInfo[$find][8], 8) == '' Or $NetworkAdapterInfo[$find][8] = '0.0.0.0' Then
Local $IP, $Subnet, $GateWay, $Dnslist
If RegRead('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\' & $NetworkAdapterInfo[$find][1], 'EnableDHCP') = 0x00000000 Then
$IP = 'IPAddress'
$SubMask = 'SubnetMask'
$GateWay = 'DefaultGateway'
$Dnslist = 'NameServer'
Else
$IP = 'DhcpIPAddress'
$SubMask = 'DhcpSubnetMask'
$GateWay = 'DhcpDefaultGateway'
$Dnslist = 'DhcpNameServer'
EndIf
$NetworkAdapterInfo[$find][8] = RegRead('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\' & $NetworkAdapterInfo[$find][1], $IP)
$NetworkAdapterInfo[$find][9] = RegRead('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\' & $NetworkAdapterInfo[$find][1], $SubMask)
$NetworkAdapterInfo[$find][10] = RegRead('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\' & $NetworkAdapterInfo[$find][1], $GateWay)
Local $DNS = RegRead('HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\' & $NetworkAdapterInfo[$find][1], $Dnslist)
If StringStripWS($DNS, 8) == '' Then
$NetworkAdapterInfo[$find][12] = 0
Else
$DNS = StringSplit($DNS, ',')
$NetworkAdapterInfo[$find][12] = UBound($DNS) - 1
For $i = 1 To UBound($DNS) - 1
If UBound($NetworkAdapterInfo, 2) < ($i + 12 + 1) Then ReDim $NetworkAdapterInfo[UBound($NetworkAdapterInfo, 1)][$i + 12 + 1]
$NetworkAdapterInfo[$find][$i + 12] = $DNS[$i]
Next
EndIf
EndIf
EndIf
EndIf
Next
EndIf
Return $NetworkAdapterInfo
EndFunc ;==>_NetworkAdapterInfo
|