CMD/BAT - [решено] Найти ip-адрес по условиям среди нескольких интерфейсов

Ответить
Аватара пользователя
IvanXXL

CMD/BAT - [решено] Найти ip-адрес по условиям среди нескольких интерфейсов

Сообщение IvanXXL »

Прошу помощи в решении следующей задачи:

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

Re: CMD/BAT - [решено] Найти ip-адрес по условиям среди нескольких интерфейсов

Сообщение Iska »

Цитата IvanXXL:



ip-адрес интерфейса
CMD/BAT - [решено] Найти ip-адрес по условиям среди нескольких интерфейсов




Первый из IP-адресов, на WSH:



Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

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
'=============================================================================







Примерный метод использования в пакетном файле:



Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@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
Ответить

Вернуться в «Скриптовые языки администрирования Windows»