PDA

Показать полную графическую версию : [решено] Найти ip-адрес по условиям среди нескольких интерфейсов


IvanXXL
06-02-2015, 08:19
Прошу помощи в решении следующей задачи:
Есть некоторое количество компьютеров с количеством активных сетевых интерфейсов от 3 до 5 на ОС WinXP, Win7 и Win81. При локальном запуске скрипта в переменную должен передаваться ip-адрес интерфейса, на котором в качестве одного из DNS-серверов прописан хотя бы один из этих адресов: 192.168.0.10, 192.168.0.100. Активный интерфейс с такими DNS-серверами может быть только один.

Iska
06-02-2015, 09:32
ip-адрес интерфейса »
Первый из IP-адресов, на WSH:
Option Explicit

Dim objDictionary


Set objDictionary = WScript.CreateObject("Scripting.Dictionary")

With objDictionary
.Add "192.168.0.10", ""
.Add "192.168.0.100", ""
End With

WScript.Echo FindIPAddress()

objDictionary.RemoveAll
Set objDictionary = Nothing

WScript.Quit 0
'=============================================================================

'=============================================================================
Function FindIPAddress()
Dim objSWbemObjectEx

Dim strDNSServer
Dim strAddress

For Each objSWbemObjectEx In WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer(".", "root\cimv2").ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
With objSWbemObjectEx
If Not IsNull(.DNSServerSearchOrder) Then
For Each strDNSServer In .DNSServerSearchOrder
If objDictionary.Exists(strDNSServer) Then
If Not IsNull(.IPAddress) Then
For Each strAddress In .IPAddress
FindIPAddress = strAddress

Exit Function
Next
End If
End If
Next
End If
End With
Next
End Function
'=============================================================================

Примерный метод использования в пакетном файле:
@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq delims=" %%i in (
`cscript.exe //nologo "C:\Песочница\066\FindIPAddress.vbs"`
) do set sIPAddress=%%~i


if defined sIPAddress (
echo [%sIPAddress%].
) else (
echo Can't determine IP-address.
exit /b 1
)

endlocal
exit /b 0

IvanXXL
09-02-2015, 06:24
Спасибо за рабочее решение.




© OSzone.net 2001-2012