[CMD] Поиск мак адреса активного сетевого адаптера и вывод текста в файле и замена ":" на "-"

darkfallen

Новый пользователь
Сообщения
12
Реакции
0
Задача 1
генерация текстового файла в котором будет выводить мак адрес устройства(активный езернет или wireless)
под вин 7,8,10
и если будет выводить мак с ":", то заменить на "-"
то что у меня получилось, но не выводит в таких случаях wireless устройство.

CMD/BATCH:
@echo off
chcp 866
::
echo+
echo ""
SET /P NAME=

:: Определяем канал связи
echo+
echo "Введите порядковый номер  (если несколько, от 1, 2, 3...)"
SET /P NINF=

::
echo+
echo
SET /P NTU=

:: Определяем уникальный ID (mac-адрес сетевой карты)
for /f "tokens=3 skip=1" %%a in ('wmic path Win32_NetworkAdapter where "PNPDeviceID like '%%%%PCI%%%%' AND NetConnectionStatus=2 AND AdapterTypeID='0'" get name^,MacAddress^,AdapterType') do (Set "MacAddress=%%a")


:: Генерируем лог
echo %NAME%> "C:\%NAME%_%NINF%_tomiaclog.txt"
echo %NTU%_%NINF%_%MacAddress%>> "C:\%NAME%_%NINF%_tomiaclog.txt"
ipconfig /all>> "C:\%NAME%_%NINF%_tomiaclog.txt"



@echo off
setlocal enabledelayedexpansion
 
rem имя файла
Set infile= C:\%NAME%_%NINF%_tomiaclog.txt
 
rem ищем это
Set find=:
 
rem меняем на это
Set replace=-
 
@echo off
setlocal enabledelayedexpansion
set COUNT=0
for /F "tokens=* delims=," %%n in (!infile!) do (
set LINE=%%n
set TMPR=!LINE:%find%=%replace%!
Echo !TMPR!>>tmp.txt
)
move tmp.txt %infile%



:: Открываем порты
netsh advfirewall firewall add rule name="zabbix_sever_in" protocol="TCP" localport=10051 action=allow dir=IN
netsh advfirewall firewall add rule name="zabbix_sever_out" protocol="TCP" localport=10051 action=allow dir=OUT
netsh advfirewall firewall add rule name="zabbix_agent_in" protocol="TCP" localport=10050 action=allow dir=IN
netsh advfirewall firewall add rule name="zabbix_agent_out" protocol="TCP" localport=10050 action=allow dir=OUT

pause
 
Последнее редактирование модератором:
Выполните в консоли и прикрепите файл adapter.txt

Код:
> adapter.txt wmic path Win32_NetworkAdapter get name,MacAddress,AdapterType,NetConnectionStatus,AdapterTypeID,PNPDeviceID
 
> adapter.txt wmic path Win32_NetworkAdapter get name,MacAddress,AdapterType,NetConnectionStatus,AdapterTypeID,PNPDeviceID
Тогда в выводимый файл не выводится мак адрес.
Может быть некорректно объяснил.
вот смотрите при удачном выводе получается такой лог
test
omsu_OU_Test_2C-FD-A1-76-76-0D
То есть вышеупомянутый скрипт, должен выбрать активный сетевой адаптер пусть это будет езернет или беспроводное соединение и после определения должен его поставить для генерации имени хостнейм
 
wmic вообще работает?
У меня на ноуте нормально выводятся этой командой все адаптеры, в т.ч. от wi-fi.

А в ipconfig /all он хотя бы есть?
 
wmic вообще работает?
У меня на ноуте нормально выводятся этой командой все адаптеры, в т.ч. от wi-fi.

А в ipconfig /all он хотя бы есть?
1622612949741.png

и в ipconfig там тоже все устройства есть и в том числе wireless/ но вопрос вывода,чтобы он подставил это значение в определенное место в txt
Да, команду в отдельной строке он выводит все устройства, но как сделать так, чтобы он из этого списка вычленил активное устройство и подставил сюда - echo %NTU%_%NINF%_%MacAddress%>>
 
Для этого и спрашивал у вас файл.

По хорошему активный адаптер можно определить через выполнение запроса, например на DNS, в результате чего вы получаете адрес шлюза, с которого в итоге этот запрос отправился. Затем через таблицу маршрутов можно узнать индекс адаптера этого шлюза. И далее его MAC.

CMD/BATCH:
@echo off
SetLocal EnableExtensions
chcp 862
for /f "tokens=8" %%a in ('tracert -d -h 1 -w 1 -4 1.1.1.1 ^| find "ms"') do set "GateWay=%%a"
for /f "tokens=2 delims==" %%a in ('wmic path Win32_IP4RouteTable WHERE NextHop^="%GateWay%" GET InterfaceIndex /value') do set InterfaceIndex=%%a
for /f "tokens=2 delims==" %%a in ('wmic path Win32_NetworkAdapter WHERE InterfaceIndex^=%InterfaceIndex% GET MACAddress /value') do set MAC=%%a
echo MAC: "%MAC::=-%"
pause
 
Работает, вроде все как полагается. А еще вопрос, если я хочу добавить файл zabbix.conf
@echo off
echo LogType=file>> "C:\zabbix_agentd.conf"
echo LogFile=C:\Program Files (x86)\Zabbix Agent\Zabbix_agentd.log>> "C:\zabbix_agentd.conf"
echo DebugLevel=0>> "C:\zabbix_agentd.conf"
echo EnableRemoteCommands=0>> "C:\zabbix_agentd.conf"
echo Server=zabbix.ru>> "C:\zabbix_agentd.conf"
echo ListenPort=10050>> "C:\zabbix_agentd.conf"
echo ServerActive=zabbix.ru>> "C:\zabbix_agentd.conf"
echo Hostname=%NTU%_%NINF%_%MAC::=-%>> "C:\zabbix_agentd.conf"
echo HostMetadataItem=system.uname>> "C:\zabbix_agentd.conf"
echo Timeout=10>> "C:\zabbix_agentd.conf"

но у кого то возможно 64 битная версия винды, а у кого то 32 и возможно ли определить папку, которая была раннее создана в каталоге
C:\Program Files\Zabbix Agent
или так C:\Program Files(x86)\Zabbix Agent
 
Через проверку существования папки - if exist
Или через проверку битности системы:
Код:
Set "xOS=x64"& If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set "xOS=x32"
Потом
Код:
if "%xOS%"=="x64" (set "PF=C:\Program Files(x86)") else (set "PF=C:\Program Files")
echo LogFile=%PF%\Zabbix Agent\Zabbix_agentd.log>> "C:\zabbix_agentd.conf"
и т.д.
 
Код:
@echo off
chcp 866
echo+
echo "Введите наименование "
SET /P NAME=


echo+
echo "Введите порядковый номер "
SET /P NINF=

:: Определяем номер
echo+
echo Введите Наименование
SET /P NTU=

:: Определяем уникальный ID (mac-адрес сетевой карты)

SetLocal EnableExtensions
for /f "tokens=8" %%a in ('tracert -d -h 1 -w 1 -4 10.10.51.1 ^| find "ms"') do set "GateWay=%%a"
for /f "tokens=2 delims==" %%a in ('wmic path Win32_IP4RouteTable WHERE NextHop^="%GateWay%" GET InterfaceIndex /value') do set InterfaceIndex=%%a
for /f "tokens=2 delims==" %%a in ('wmic path Win32_NetworkAdapter WHERE InterfaceIndex^=%InterfaceIndex% GET MACAddress /value') do set MAC=%%a
echo MAC: "%MAC::=-%"
pause

:: Генерируем лог
echo %NAME%> "C:\%NAME%_%NINF%_tomi.txt"
echo %NTU%_%NINF%_%MAC::=-%>> "C:\%NAME%_%NINF%_tomi.txt"
ipconfig /all>> "C:\%NAME%_%NINF%_tomi.txt"



@echo off
setlocal enabledelayedexpansion
 
rem имя файла
Set infile= C:\%NAME%_%NINF%_tomi.txt
 
rem ищем это
Set find=:
 
rem меняем на это
Set replace=-
 
@echo off
setlocal enabledelayedexpansion
set COUNT=0
for /F "tokens=* delims=," %%n in (!infile!) do (
set LINE=%%n
set TMPR=!LINE:%find%=%replace%!
Echo !TMPR!>>tmp.txt
)
move tmp.txt %infile%

Set "xOS=x64"& If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set "xOS=x32"
if "%xOS%"=="x64" (set "PF=C:\Program Files(x86)") else (set "PF=C:\Program Files")
echo LogFile=%PF%\Zabbix Agent\Zabbix_agentd.log>> "C:\zabbix_agentd.conf"

@echo off
echo LogType=file>> "C:\zabbix_agentd.conf"
echo LogFile=C:\Program Files (x86)\Zabbix Agent\Zabbix_agentd.log>> "C:\zabbix_agentd.conf"
echo DebugLevel=0>> "C:\zabbix_agentd.conf"
echo EnableRemoteCommands=0>> "C:\zabbix_agentd.conf"
echo Server=zabbix.ru>> "C:\zabbix_agentd.conf"
echo ListenPort=10050>> "C:\zabbix_agentd.conf"
echo ServerActive=zabbix.ru>> "C:\zabbix_agentd.conf"
echo Hostname=%NTU%_%NINF%_%MAC::=-%>> "C:\zabbix_agentd.conf"
echo HostMetadataItem=system.uname>> "C:\zabbix_agentd.conf"
echo Timeout=10>> "C:\zabbix_agentd.conf"





:: Открываем порты
netsh advfirewall firewall add rule name="zabbix_sever_in" protocol="TCP" localport=10051 action=allow dir=IN
netsh advfirewall firewall add rule name="zabbix_sever_out" protocol="TCP" localport=10051 action=allow dir=OUT
netsh advfirewall firewall add rule name="zabbix_agent_in" protocol="TCP" localport=10050 action=allow dir=IN
netsh advfirewall firewall add rule name="zabbix_agent_out" protocol="TCP" localport=10050 action=allow dir=OUT

pause

Если я правильно все понял, то получилось это и к сожалению - это не сработало
 
Последнее редактирование модератором:
то есть на выходе получается конфиг как и раньше, но нужно чтобы он его положил в зависимости от разрядности в соотвествующий раздел
1623841483662.png
 
@echo off echo LogType=file>> "C:\zabbix_agentd.conf" echo LogFile=C:\Program Files (x86)\Zabbix Agent\Zabbix_agentd.log>> "C:\zabbix_agentd.conf" echo DebugLevel=0>> "C:\zabbix_agentd.conf" echo EnableRemoteCommands=0>> "C:\zabbix_agentd.conf" echo Server=zabbix.ru>> "C:\zabbix_agentd.conf" echo ListenPort=10050>> "C:\zabbix_agentd.conf" echo ServerActive=zabbix.ru>> "C:\zabbix_agentd.conf" echo Hostname=%NTU%_%NINF%_%MAC::=-%>> "C:\zabbix_agentd.conf" echo HostMetadataItem=system.uname>> "C:\zabbix_agentd.conf" echo Timeout=10>> "C:\zabbix_agentd.conf"
этими строками я создаю файл конфигурации заббикс. он создается в корне диска С, а мне нужно сделать так, чтобы после генерации данного файла в зависимости от раннее установленного агента заббикс в зависимости от разрядности операционной системы, переносился данный файл.
 
А можно пойти от обратного, например чтобы он кидал этот в конфиг в ту папку, где уже установлен или установился zabbix. И заменил раннее вложенный конфиг в этой папке?
 
Ну тогда вам необходимо узнать, куда он установлен, например через запрос в реестр.
Пройдитесь поиском, скорее всего найдете где-то в разделах HKEY_LOCAL_MACHINE\SOFTWARE
 
1623849205667.png

В моем случае так, но фактически, через batcha, возможно ли файл формата .conf который сгенерировался, положить в ту папку, где установлен забикс агент или заменить существующий zabbix_agentd.conf
 
Возможно.
Но вы нашли далеко не самый лучший ключ, к тому же не видно полностью значение.
Неужели нет никаких записей по путях HKEY_LOCAL_MACHINE\SOFTWARE ... ?
 
Назад
Сверху Снизу