Получить имя интерфейса, IP и MAC в командной строке Windows

Я хочу получить список всех интерфейсов, IP и MAC-адресов на машине. У меня довольно много машин для получения этой информации (около 600), и я не могу использовать пакетный файл на устройствах. Я хотел бы отправить команду и вернуть эхо-выход.

Вся информация, которая мне нужна, находится в ipconfig /all, но я не уверен, как ее разобрать с помощью цикла for. Я все еще новичок в этом комплексе петли. По сути, мне нужно получить однострочный вывод, если это возможно. Какие-либо предложения?

hostname, interface1 name, IP, Mac, interface2 name, ip mac,... и т. д.

РЕДАКТИРОВАТЬ: мне повезло с выводами WMIC, но у меня возникли проблемы с их правильным отображением в файле. Если я запущу эти.

wmic computersystem get name  
wmic nic where netenabled=true get netconnectionID   
wmic /output:C:\wmictest.csv nicconfig where IPEnabled=True get ipaddress, macaddress /format:csv

Мой вывод не показывает netconnectionID. Также выходной файл в виде пустой строки перед текстом. ничего страшного, но странно. Любые предложения о том, как правильно получить всю информацию в файле? вот мой пример вывода.

Node,IPAddress,MACAddress  
U8001674-TPL-A,{10.91.35.84;fe80::52b:9817:6bbf:dca4},F0:1F:AF:2A:5E:B5

person scott    schedule 26.11.2014    source источник
comment
Начните с for /F "tokens=1* delims=:" %G in ('ipconfig /all') do @echo %G %H, чтобы увидеть пример. Подробнее…. Затем вы можете заменить это слишком простое @echo %G %H на несколько команд в цикле FOR. Не стесняйтесь обновить свой вопрос, указав фактические достижения, и задать дополнительные вопросы на случай, если вам что-то понадобится.   -  person JosefZ    schedule 29.11.2014
comment
Загляните в wmic nicconfig /? Затем сделайте что-то вроде этого: wmic /node:remotePCnetname_or_IP /user:domain\admin /password:domainAdminPass nicconfig where 'DNSDomain like "%.%" get MACAddress, IPAddress, DNSHostName /format:csv (но посолите по вкусу). Это не окончательный ответ, но это ваш путь к поиску собственного ответа. Дай человеку рыбу, и он будет сыт один день; но научите его пользоваться интернетом, и он не будет беспокоить вас неделями. --Стивен Райт   -  person rojo    schedule 01.12.2014
comment
Моя проблема с циклом for в ipconfig /all заключалась в том, как получить разные наборы данных для каждой строки. wmic ближе, но я не уверен, как объединить два запроса. 'wmic nic get netconnectionID' это даст мне имена интерфейсов, но это даст мне IP и MAC, которые мне нужны, и покажет мне только включенные интерфейсы, чтобы избавиться от туннельного мусора server 2008. 'wmic nicconfig, где IPEnabled=True получить ipaddress, macaddress' Если я смогу получить их вместе, это значительно приблизит меня к результату, который я могу бросить в Excel и добавить макрос.   -  person scott    schedule 04.12.2014
comment
Еще одно обновление. Итак, эти три команды — то, что мне нужно, чтобы понять, как их собрать. Я бы не возражал, если бы имя хоста было в каждой строке. wmic computersystem получить имя wmic nic, где netenabled=true получить идентификатор сети wmic nicconfig, где IPEnabled=True получить ipaddress, macaddress   -  person scott    schedule 04.12.2014


Ответы (3)


Вот решение wmic, полученное с помощью echo =!HostName!,!NetConID!,!IP_Addrs!,!MAC_Addr! с одной строкой для каждого активного адаптера локального компьютера (не могу попробовать адаптации, необходимые для запуска его на удаленной машине):

@ECHO OFF >NUL
@SETLOCAL enableextensions enabledelayedexpansion
set "HostName="
wmic computersystem get name ^
  /format:textvaluelist.xsl>"%temp%\cmptr.txt" 2>nul
for /F "tokens=1* delims==" %%G in ('type "%temp%\cmptr.txt"') do (
  if /i "%%G"=="Name" set "HostName=%%~H"
)
set "MAC_Addr="
for /F "tokens=1* delims=:" %%G in ('ipconfig /all^|find /i "Physical Address"') do (
  set "foo="
  for %%I in (%%~H) do if not "%%~I"=="" set "foo=%%~I"
  set "MAC_Addr=!foo:-=:!"
  set "NetConID="
  wmic nic where "NetEnabled='true' and MACAddress='!MAC_Addr!'" ^
    list /format:textvaluelist.xsl>"%temp%\wmcnc.txt" 2>&1
  for /F "tokens=1* delims==" %%I in ('type "%temp%\wmcnc.txt"') do (
    if /i "%%I"=="NetConnectionID" set "NetConID=%%~J"
  )
  set "IP_Addrs="
  wmic nicconfig where "IPEnabled='True' and MACAddress='!MAC_Addr!'" ^
    list /format:textvaluelist.xsl>"%temp%\wmcnccfg.txt" 2>&1
  for /F "tokens=1* delims==" %%I in ('type "%temp%\wmcnccfg.txt"') do (
    if /i "%%I"=="IPAddress" set "IP_Addrs=%%~J"
  )
  if not "!NetConID!,!IP_Addrs!"=="," (
    @echo =!HostName!,!NetConID!,!IP_Addrs!,!MAC_Addr!
  )
)
:endlocal
del "%temp%\cmptr.txt" 2>nul
del "%temp%\wmcnc.txt" 2>nul
del "%temp%\wmcnccfg.txt" 2>nul
@ENDLOCAL
goto :eof

Другое решение анализирует полулинейный вывод из ipconfig /ALL и дает результаты, наиболее близкие к предыдущему wmic, следующим образом:

@ECHO OFF >NUL
@SETLOCAL enableextensions enabledelayedexpansion
  set "HostName="
  set "NetConID="
  set "IP_Addr4="
  set "IP_Addr6="
  set "MAC_Addr="
for /F "tokens=1* delims=:" %%G in ('ipconfig /ALL') do (
  set "foo=%%~G"
  if not "!foo:Host name=!"=="!foo!" (
    for %%I in (%%~H) do if not "%%~I"=="" set "HostName=%%~I"
  )
  if "!foo:adapter=!"=="!foo!" (
    if not "!foo:Physical Address=!"=="!foo!" (
      for %%I in (%%~H) do if not "%%~I"=="" set "MAC_Addr=%%~I"
    )
    if not "!foo:IPv4 Address=!"=="!foo!" (
      for %%I in (%%~H) do if not "%%~I"=="" set "IP_Addr4=%%~I"
      set "IP_Addr4=!IP_Addr4:(preferred)=!"
    )
    if not "!foo:local IPv6 Address=!"=="!foo!" (
      for %%I in (%%~H) do (
        if not "%%~I"=="" (
          for /F "delims=%%" %%p in ("%%~I") Do set "IP_Addr6=%%~p"
          rem set "IP_Addr6=!IP_Addr6:(preferred)=!"
        )
      )
    )
  ) else (
    if not "!IP_Addr6!,!IP_Addr4!"=="," (
      @echo #!HostName!,!NetConID!,{"!IP_Addr4!","!IP_Addr6!"},!MAC_Addr!
    )
    set "MAC_Addr="
    set "IP_Addr4="
    set "IP_Addr6="
    set "NetConID=!foo:*adapter =!"
  )
)
if not "!IP_Addr6!,!IP_Addr4!"=="," (
  @echo =!HostName!,!NetConID!,{"!IP_Addr4!","!IP_Addr6!"},!MAC_Addr!
)

:endlocal
@ENDLOCAL
goto :eof
person JosefZ    schedule 28.12.2014

Я хотел бы использовать:

wmic nicconfig where "IPEnabled = True" get ipaddress ... и вещи, которые вы хотели бы получить. Нет необходимости анализировать вывод.

person jacetyh    schedule 17.10.2016

спросил: я не могу использовать пакетный файл на устройствах. Я хотел бы отправить команду и получить ответный вывод.
мое решение пытается использовать одну строку команд.
Также я использую 2 цикла, чтобы лучше уточнить поиск данных.

поэтому попробуйте и это решение:

@for /f "skip=2 delims=, tokens=1,2,3,4" %L in ('wmic nic where "netenabled=true" get macaddress^,index^,netconnectionid^,productname /format:csv') do @for /f "skip=2 delims={}, tokens=2" %A in ('wmic nicconfig where "index=%M" get ipaddress^,ipsubnet ^/format:csv') do @echo %L - %O - %N - %A
person LelioS    schedule 25.05.2020
comment
Пожалуйста, добавьте более подробную информацию о вашем решении, почему ваше решение работает? что пользователь, который задал вопрос, сделал неправильно? Пожалуйста, сделайте это, чтобы завершить свой ответ, таким образом, это поможет людям с тем же вопросом в будущем. Спасибо! - person EnriqueBet; 25.05.2020