Командная строка, чтобы определить, какой интерфейс Ethernet используется
У меня есть сценарий, который я написал, чтобы помочь настроить компьютеры после их развертывания. Сценарий выполняет такие действия, как установка имени компьютера, включение BitLocker и т. Д. Единственное, с чем я борюсь, это настройка IP-адреса. Компьютеры, которые я использую (серверы, в частности), имеют 4 порта NIC и называются "Подключение по локальной сети" и "Подключение по локальной сети 2-4". Проблема заключается в том, что технические специалисты, которые развертывают эти серверы, не всегда подключаются к одному и тому же порту, и, кроме того, образ развертывания не всегда назначает локальное сетевое подключение Ethernet для порта NIC 1.
Вот копия скрипта, который у меня есть, который отлично работает, если включен только один порт NIC. Что мне нужно сделать, это направить вывод имени подключения по локальной сети с IP-адресом (поскольку DHCP уже существует) в переменную, которую я могу поместить в свой netsh
команда.
Текущий код на месте
:IPADDRESS
@echo Would you like static or DHCP?
@echo press 1 for static
@echo press 2 for dhcp
Choice /C:12 /N /M "?:"
IF ERRORLEVEL 2 GOTO IPDHCP
IF ERRORLEVEL 1 GOTO IPSTATIC
:IPSTATIC
set /P _IPADDR=Please enter IP address:
set /p _Subnet=Please enter Subnet:
set /p _DefaultGateway=Please Enter Default Gateway:
netsh interface ip set address name="Local Area Connection 2" static %_IPADDR% %_Subnet% %_DefaultGateway%
goto START
:IPDHCP
netsh interface ip set address "Local Area Connection 2" dhcp
goto START
:disipaddr
netsh interface ip show config name="Local Area Connection 2"
Название "Подключение по локальной сети 2" - это часть, которая меняется от сборки к сборке. Так что это та часть, которую мне нужно выделить. Я вполне уверен, что для /p
и использовать его против любого ipconfig /all
или интерфейс netsh ip show config был бы правильным путем.
Заранее спасибо за всю помощь.
2 ответа
Это будет работать и проверено на Windows 7.
Файл batch.bat:
@echo off
for /f "tokens=2 delims==" %%F in ('wmic nic where "NetConnectionStatus=2 and AdapterTypeId=0" get NetConnectionID /format:list') do set interfaceName=%%F
echo Your Interface is %interfaceName%
pause
Вы имеете в виду подключенные, которые используются?
:_InterfaceConnected_
FOR /F "tokens=3,*" %%A IN ('netsh interface show interface^|find "Connected"') DO (
echo %%B
echo connected : %%B
)
@echo:
:_InterfaceDisconnected_
FOR /F "tokens=3,*" %%A IN ('netsh interface show interface^|find "Disconnected"') DO (
echo %%B
echo disconnected : %%B
)
дает в качестве вывода:
Ethernet
connected : Ethernet
Ethernet 3
disconnected : Ethernet 3
Полный обзор с помощью команды
> netsh interface show interface
выход:
Admin State State Type Interface Name
-------------------------------------------------------------------------
Enabled Disconnected Dedicated Ethernet 3
Enabled Connected Dedicated Ethernet
Может быть, вы могли бы использовать wmic
для этого? Что-то вроде:
for /f "tokens=2 delims==" %F in ('wmic nic where "NetConnectionStatus=2 and AdapterTypeId=0" get NetConnectionID /format:list') do set %activeNet%=%F
Должно вернуть все подключенное (NetConnectionStatus=2
) Eth / 802.3 (AdapterTypeID=0
) интерфейсы - то есть тот, который подключен в вашем случае. (по некоторым причинам он также сообщает о WiFi как 802.3 на моем ноутбуке XP, но это не должно быть проблемой для сервера)
Вы можете попробовать его прямо из командной строки, чтобы увидеть, возвращает ли он то, что должен. замещать %F
с %%F
если используется в партии.
Обратите внимание, что может потребоваться проверить значение, возвращаемое для подключенного интерфейса, поскольку оно отличается для разных ОС. Полное описание класса Win32_NetworkAdapter (который nic
это псевдоним для)
Если вы на 100% уверены, что хотите проверить только те, которые начинаются с "Подключение по локальной сети", вы можете использовать where "netconnectionID like 'Local Area Connection%'"
вместо этого (или объедините это с другими условиями)