Тема: VBS: Win32_NetworkAdapterConfiguration
Помогите разобратся с проблемкой:
Необходимо определить IP адрес(а) сетевого адаптора(ров) установленных в системе.
Пробую использовать Win32_NetworkAdapterConfiguration, но возникает проблема, пр установленных нескольких сетевых адапторах(даже если их уже давно нет в системе - физически "вынут" сетевой адаптор) - выводятся несколько одинаковых IP-адресов.
Пример один: в компьютере "сгорела сетевая плата" её адрес 192.168.0.1, её заменили другой(адрес установили, тотже). в результате код ниже выдаст, уже два раза по 192.168.0.1.
Пример два: в компьютере установлена 1 сетевая плата, и виртуальный "адаптор замыкания на себя" с разными IP = адресами, в результате код ниже выдаст, что у физического и виртуального адаптора, по два IP - адреса, причем у виртуального первый IP - адрес выданный кодом будет оличатся от того, что настроен в гараф. ин. системы.
Function getip ( )
'-----------------------------------------------------------------------
' Определяю IP-адрес
' Доработать - выкидывает несколько ip-адресов, если физ. адаптор уже отключен
Dim strComputer, objWMIService, IPConfigSet, IPConfig, i, ip_comp
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set IPConfigSet = objWMIService.ExecQuery _
("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE")
'
For Each IPConfig in IPConfigSet
If Not IsNull(IPConfig.IPAddress) Then
For i=LBound(IPConfig.IPAddress) to UBound(IPConfig.IPAddress)
ip_comp=ip_comp & IPConfig.IPAddress(i)
Next
End If
Next
getip= ip_comp
End Functionв Win32_NetworkAdapterConfiguration имеется интересный параметр index, который указывает № набора конфигурации. Остается вопрос каким образом узнать какую конфигурацию использует windows?
strComputer = "."
Set WshShell = WScript.CreateObject("WScript.Shell")
'
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colIPc= objWMIService.ExecQuery _
("Select * from Win32_NetworkAdapter")
Set IPConfigSet = objWMIService.ExecQuery _
("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE")
dim ip_comp, b
For each IPc in colIPc
' Проверка на "Null" - если "NetConnectionStatus" = это "Null", то
' считаем, что сетевой адаптер, не физический
If IsNull (IPc.NetConnectionStatus) = True Then
WshShell.Popup "NetConnectionStatus=Null. Считаем, что СЕТЕВОЙ адаптор:" _
& Chr(13) & Chr(10) & IPc.Caption & IPc.MACAddress & IPc.SystemName & _
Chr(13) & Chr(10) & "не является физическим устройством", 3, "Infa", _
vbExclamation
Else
' Необходимо проверить включен ли сетевой адаптор, нас интесуют
' только включенные сетевые адапторы
If IPc.NetConnectionStatus = 2 Then ' Адаптор подключен
WshShell.Popup "NetConnectionStatus<>Null. Считаем, что СЕТЕВОЙ адаптор:" _
& Chr(13) & Chr(10) & IPc.Caption & IPc.MACAddress & IPc.SystemName _
& Chr(13) & Chr(10) & "является физическим устройством", 3, "Infa", _
vbInformation
'
MsgBox "попытка определить ip-адреса сетевого адаптора"
MsgBox "MAC adress_Win32_NetworkAdapter"& Chr(13) & Chr(10) & IPc.MACAddress
' Получаю mac- адрес нужного мне сетевого адаптора и
' пробую задействовать Win32_NetworkAdapterConfiguration
' только для адаптора с указанным MAC-адресом
For Each IPConfig in IPConfigSet
If Not IsNull(IPConfig.IPAddress) Then
For i=LBound(IPConfig.IPAddress) to UBound(IPConfig.IPAddress)
kol_ip= kol_ip+1
ip_comp=ip_comp & IPConfig.IPAddress(i)
MsgBox "Номер конфигурации адаптора: " & IPConfig.Index & Chr(13) & Chr(10) & _
"ip-адрес для этой конфигурации: " & IPConfig.IPAddress(i)
Next
End If
Next
' Проверка
MsgBox "Сетевой адаптор с описанием:" _
& Chr(13) & Chr(10) & IPc.Caption & Chr(13) & Chr(10) & _
"имеет" & kol_ip & "сетевых адреса:" & ip_comp
ip_comp=""
kol_ip=0
'Else
'MsgBox "Сетевой адаптор не подключен"
End If
End If
Next
