Сканирование сети Скриптом BAT cmd на Windows

Сканирование сети получение Логина пользователя
на основе скриптов cmd и bash
Базы Данных Mysql и Веб интерфейса отображения
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 804
Стаж: 5 лет 1 месяц
Откуда: Вологодская область
Поблагодарили: 33 раза
Контактная информация:

Сканирование сети Скриптом BAT cmd на Windows

Сообщение Артём Мамзиков »

Для WINDOWS на bat

Определение текущей сети по совпадению например 192.168. или 172.16. (если несколько сетевых адаптеров или есть виртуальные возможно неправильное определение сети!)
Пишем диапазон сканирования сети например от 1 до 255 вся сеть
Проверяем пингом если ок
Запрашиваем МАС (2 варианта), ИМЯ, Расширенные сетевые ресурсы.

Применяемые команды:
arp -a IP
net view IP
nbtstat -a IP
ping -a IP

scan-seti-otvet-primer
scan-seti-otvet-primer
Скачать
Windows-scan-seti.zip
Windows-scan-seti.zip
(23.28 КБ) 59 скачиваний
В версии cmd 6.0 - нужно закомментировать кодировку UTF-8 так как она не понимает (в базу в место русского быстрей всего придут иероглифы) :: Вывод в кодировке UTF-8 ::chcp 65001 > nul
В версии cmd 5.0 - в команде net view \\%IP%.%1 /all нужно убрать all так как оно там еще не поддерживается сделать net view \\%IP%.%1

V 2.5 08.12.2020 Убран вывод 00 и FF - MAC, сравнение MAC между разными способами получения если разные выводим оба, приводим MAC к единому выводу - меняем на :
Scan-seti2.5.bat
Показать
@ECHO OFF
mode con:cols=130 lines=1000
color 1A
:: Автор Мамзиков Артём Андреевич
:: V 2.5 08.12.2020
TITLE Skanirovanie Seti Poluchenie Dostupnih IP IMYa MAC SHARE

:: Определение текущей кодировки может отличатся 866 и 1251
for /f "tokens=2 delims=:" %%a in ('chcp') do set "kodstr=%%a"

::Удаление старого файла
del /F /Q /A:H "%~dp0OUTSETI.TXT"
::Создать скрытый временный файл для построчного лога
echo LOG %date% %TIME:~,-3%=>"%~dp0OUTSETI.TXT"
::copy /b NUL "%~dp0OUTSETI.TXT"
attrib +h "%~dp0OUTSETI.TXT"

::Получаем просто подсеть из начала совпадения сторки более правильно чем dns
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "IP"^|FINDSTR /c:"192.168." /c:"172.16."') do (
:: Так как ip разной длинны обрезка :~1.10% нам не подходит разбиваем на октеты
for /f "tokens=1-4 delims=. " %%k in ("%%a") do set IP=%%k.%%l.%%m
)

setlocal enabledelayedexpansion
:: Перебор IP
for /L %%b in (1,1,255) do call:scan %%b
::Вывод результатов сканирования сети
::echo %OUTSETI%

curl -X POST -H --silent --data-binary "@%~dp0OUTSETI.TXT" https://сайт.ru/glpi/data_server/data.php

goto:eof

:scan
::Проверка Пингом. Недоступность, строка символов "TTL" в выводимых результатах отсутствует. Если строка символов "TTL" найдена, то FIND сформирует значение переменной ERRORLEVEL равным 0
ping -n 1 -w 1000 %IP%.%1 | find /I "TTL" > nul
if %ERRORLEVEL%==0 (goto :YesPing) else (goto :end)

:: Еще один вызов из-за 2 команды мака, в общем цикле 1 мака если не нашло 2 часть не выполняется, в раздельном виде не передается переменная так как закрыто было циклом пинга!
:YesPing
:: Очистка обнуление перменных в цикле из буфера там где их нет
set "MAC="
set "MACP="
set "MACPP="
set "NAMEP="
set "NAME="
set "DISK="
set "PRINT="
set "IPC="
set "NETBIOSP="
set "NETBIOS="
set "GROUP="
:: Запрос Имени
For /f "tokens=4 delims= " %%d in ('ping -a -n 1 -w 0 %IP%.%1^|FIND /I "["') do set NAMEP=%%d

:: Запрашиваем имя NETBIOS, Рабочую группу и MAC искомые строки 00 20 MAC
for /f "tokens=1,3-5" %%o in ('nbtstat -A %IP%.%1^|FINDSTR /c:"<00>" /c:"<20>" /c:"MAC"') do (
:: Еще один способ получения MAC
for /f "tokens=2 delims==" %%s in ('echo %%o%%p%%q%%r^|FIND "MAC"') do set MACP=%%s
:: В кодировке cp1251
IF /I "%%p"=="Уникальный" (set NETBIOSP=!NETBIOSP!%%o:) ELSE (IF /I "%%p"=="Группа" set GROUP=%%o)
:: В кодировке cp866 и EN
IF /i "%%p"=="“­ЁЄ «м­л©" (set NETBIOSP=!NETBIOSP!%%o:) ELSE (IF /i "%%p"=="ѓагЇЇ " (set GROUP=%%o) ELSE IF /i "%%p"=="UNIQUE" (set NETBIOSP=!NETBIOSP!%%o:) ELSE IF /i "%%p"=="GROUP" (set GROUP=%%o)))

:: Разбиваем 2 вывода значения имени 00 и 20
for /f "tokens=1,2 delims=:" %%q in ("%NETBIOSP%") do (
:: Сравниваем имя если одинаково выводим 1 , сравниваем с путыми переменными , если разные выводим 2
IF /I "%%q" == "%%r" ( set NETBIOS=%%q) ELSE (IF /i "%%q1"=="1" (set NETBIOS=%%r) ELSE IF /i "%%r1"=="1" (set NETBIOS=%%q) ELSE IF /I "%%q" NEQ "%%r" (set NETBIOS=%%q %%r)))

:: Сравниваем из 2х команд имена если одинаковые выводи 1, если есть пустое выводим одно, если разные выводим оба
IF /i "%NAMEP%"=="%NETBIOS%" (set NAME=%NAMEP%) ELSE (IF /i "%NAMEP%1"=="1" (set NAME=%NETBIOS%) ELSE IF /i "%NETBIOS%1"=="1" (set NAME=%NAMEP%) ELSE IF /I "%NAMEP%" NEQ "%NETBIOS%" (set NAME=%NAMEP% %NETBIOS%))

:: Проверить что 1 MAC не пустой и не 00-00-00-00-00-00 ff-ff-ff-ff-ff-ff 00:00:00:00:00:00 ff:ff:ff:ff:ff:ff , если да берем значение 2рого
IF /i %MACP%1==1 (set MACP=) ELSE (IF /i "%MACP%"=="00-00-00-00-00-00" (set MACP=) ELSE IF /i "%MACP%"=="ff-ff-ff-ff-ff-ff" (set MACP=) ELSE IF /i "%MACP%"=="00:00:00:00:00:00" (set MACP=) ELSE IF /i "%MACP%"=="ff:ff:ff:ff:ff:ff" (set MACP=))

::Если MAC не определился, пробуем 2-ой командой
For /f "tokens=2 delims= " %%l in ('arp -a %IP%.%1^|FIND /I "%IP%.%1"') do set MACPP=%%l
:: Проверить что 2 MAC не пустой и не 00-00-00-00-00-00 ff-ff-ff-ff-ff-ff 00:00:00:00:00:00 ff:ff:ff:ff:ff:ff
IF /i %MACPP%1==1 (set MACPP=) ELSE (IF /i "%MACPP%"=="00-00-00-00-00-00" (set MACPP=) ELSE IF /i "%MACPP%"=="ff-ff-ff-ff-ff-ff" (set MACPP=) ELSE IF /i "%MACPP%"=="00:00:00:00:00:00" (set MACPP=) ELSE IF /i "%MACPP%"=="ff:ff:ff:ff:ff:ff" (set MACPP=))

:: Сравниваем из 2х команд MAC если одинаковые выводи 1, если есть пустое выводим одно, если разные выводим оба
IF /I "%MACP%"=="%MACPP%" (set MAC=%MACP%) ELSE (IF /i "%MACP%1"=="1" (set MAC=%MACPP%) ELSE IF /i "%MACPP%1"=="1" (set MAC=%MACP%) ELSE IF /I "%MACP%" NEQ "%MACPP%" (set MAC=%MACP% %MACPP%))
:: Меняем тире - на :
set MAC=%MAC:-=:%
IF /I "%MAC%"=="-=:" (set MAC=) ELSE (set MAC=%MAC%)

:: Расшаренные сетевые ресурсы (не работает на XP net view \\IP /all работает только без /all так net view \\IP)
FOR /F "skip=2 delims= tokens=1-4" %%f IN ('net view \\%IP%.%1 /all^|FIND " "') do (
set f=%%f
set f=!f: =:!
::echo !f!
:: Более точно разделим столбцы по 2 пробелам выставим : будет означать новый столбец
FOR /F "delims=: tokens=1,2,3,4" %%g in ("!f!") do (
:: В кодировке cp1251
IF /I "%%h"=="Диск" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF /I "%%h"=="Печать" set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i )
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF /I "%%h"=="„ЁбЄ" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF /I "%%h"=="ЏҐз вм" set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i )
IF /i "%%h"=="Disk" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF /i "%%h"=="Print" (set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE IF /i "%%h"=="IPC" (set IPC=!IPC!%%h: \\%IP%.%1\%%g comm:%%i ))))

:: Выводим все в одну переменную плюс накопительную всех циклов
::SET OUTSETI=!OUTSETI!IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT% %IPC% ^&echo.& exit /b
:: Выводим строки в файл OUTSETI.TXT
SET OUTSETI=WINSCANSETI=IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT%%IPC% NOFILTR:%GROUP%
:: Вывод в кодировке UTF-8
chcp 65001 > nul
echo %OUTSETI% >> "%~dp0OUTSETI.TXT"
:: Возврат кодировки
chcp %kodstr:~1% > nul
setlocal DISABLEDELAYEDEXPANSION

:end

:: Удаление старых логов более 31 день
::forfiles /p "%~dp0logseti" /S /D -31 /C "cmd /c del /f /a /q @file"
Версия 2.4 добавлен вывод имени NETBIOS и Рабочей группы

:: Запрашиваем имя NETBIOS и Рабочую группу искомые строки 00 и 20
for /f "tokens=1,3" %%o in ('nbtstat -A %IP%.%1^|FINDSTR /c:"<00>" /c:"<20>"') do (
:: В кодировке cp1251
IF "%%p"=="Уникальный" (set NETBIOSP=!NETBIOSP!%%o:) ELSE (IF "%%p"=="Группа" set GROUP=%%o)
:: В кодировке cp866 и EN
IF /i "%%p"=="“­ЁЄ «м­л©" (set NETBIOSP=!NETBIOSP!%%o:) ELSE (IF /i "%%p"=="ѓагЇЇ " (set GROUP=%%o) ELSE IF /i "%%p"=="UNIQUE" (set NETBIOSP=!NETBIOSP!%%o:) ELSE IF /i "%%p"=="GROUP" (set GROUP=%%o)))
:: Разбиваем 2 вывода значения имени 00 и 20
for /f "tokens=1,2 delims=:" %%q in ("%NETBIOSP%") do (
:: Сравниваем имя если одинаково выводим 1 если разные выводим 2
IF "%%q" == "%%r" ( set NETBIOS=%%q ) ELSE (set NETBIOS=%%q:%%r ))
Scan-seti2.4.bat
Показать
@ECHO OFF
mode con:cols=130 lines=1000
color 1A
:: Автор Мамзиков Артём Андреевич
:: V 2.4 07.12.2020
TITLE Skanirovanie Seti Poluchenie Dostupnih IP IMYa MAC SHARE

:: Определение текущей кодировки может отличатся 866 и 1251
for /f "tokens=2 delims=:" %%a in ('chcp') do set "kodstr=%%a"

::Удаление старого файла
del /F /Q /A:H %~dp0OUTSETI.TXT
::Создать скрытый временный файл для построчного лога
echo LOG %date% %TIME:~,-3%=>%~dp0OUTSETI.TXT
::copy /b NUL %~dp0OUTSETI.TXT
attrib +h %~dp0OUTSETI.TXT

::Получаем просто подсеть из начала совпадения сторки более правильно чем dns
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "IP"^|FINDSTR /c:"192.168." /c:"172.16."') do (
:: Так как ip разной длинны обрезка :~1.10% нам не подходит разбиваем на октеты
for /f "tokens=1-4 delims=. " %%k in ("%%a") do set IP=%%k.%%l.%%m
)

setlocal enabledelayedexpansion
:: Перебор IP
for /L %%b in (1,1,255) do call:scan %%b
::Вывод результатов сканирования сети
::echo %OUTSETI%

curl -X POST -H --silent --data-binary "@%~dp0OUTSETI.TXT" https://сайт.ru/glpi/data_server/data.php

goto:eof

:scan
::Проверка Пингом. Недоступность, строка символов "TTL" в выводимых результатах отсутствует. Если строка символов "TTL" найдена, то FIND сформирует значение переменной ERRORLEVEL равным 0
ping -n 1 -w 1000 %IP%.%1 | find /I "TTL" > nul
if %ERRORLEVEL%==0 (goto :YesPing) else (goto :end)

:: Еще один вызов из-за 2 команды мака, в общем цикле 1 мака если не нашло 2 часть не выполняется, в раздельном виде не передается переменная так как закрыто было циклом пинга!
:YesPing
:: Очистка обнуление перменных в цикле из буфера там где их нет
set "MAC="
set "NAME="
set "DISK="
set "PRINT="
set "IPC="
set "NETBIOSP="
set "NETBIOS="
set "GROUP="
:: Запрос Имени
For /f "tokens=4 delims= " %%d in ('ping -a -n 1 -w 0 %IP%.%1^|FIND /I "["') do set NAME=%%d
:: Запрос MAC
For /f "tokens=5 delims= " %%e in ('nbtstat -a %IP%.%1^|FIND /I "MAC"') do set MAC=%%e
::Если MAC не определился, пробуем 2-ой командой
IF %MAC%1==1 For /f "tokens=2 delims= " %%l in ('arp -a %IP%.%1^|FIND /I "%IP%.%1"') do set MAC=%%l
:: Расшаренные сетевые ресурсы (не работает на XP net view \\IP /all работает только без /all так net view \\IP)
FOR /F "skip=2 delims= tokens=1-4" %%f IN ('net view \\%IP%.%1 /all^|FIND " "') do (
set f=%%f
set f=!f: =:!
::echo !f!
:: Более точно разделим столбцы по 2 пробелам выставим : будет означать новый столбец
FOR /F "delims=: tokens=1,2,3,4" %%g in ("!f!") do (
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF "%%h"=="„ЁбЄ" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF "%%h"=="ЏҐз вм" set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i )
IF /i "%%h"=="Disk" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF /i "%%h"=="Print" (set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE IF /i "%%h"=="IPC" (set IPC=!IPC!%%h: \\%IP%.%1\%%g comm:%%i ))))

:: Запрашиваем имя NETBIOS и Рабочую группу искомые строки 00 и 20
for /f "tokens=1,3" %%o in ('nbtstat -A %IP%.%1^|FINDSTR /c:"<00>" /c:"<20>"') do (
:: В кодировке cp1251
IF "%%p"=="Уникальный" (set NETBIOSP=!NETBIOSP!%%o:) ELSE (IF "%%p"=="Группа" set GROUP=%%o)
:: В кодировке cp866 и EN
IF /i "%%p"=="“­ЁЄ «м­л©" (set NETBIOSP=!NETBIOSP!%%o:) ELSE (IF /i "%%p"=="ѓагЇЇ " (set GROUP=%%o) ELSE IF /i "%%p"=="UNIQUE" (set NETBIOSP=!NETBIOSP!%%o:) ELSE IF /i "%%p"=="GROUP" (set GROUP=%%o)))
:: Разбиваем 2 вывода значения имени 00 и 20
for /f "tokens=1,2 delims=:" %%q in ("%NETBIOSP%") do (
:: Сравниваем имя если одинаково выводим 1 если разные выводим 2
IF "%%q" == "%%r" ( set NETBIOS=%%q ) ELSE (set NETBIOS=%%q:%%r ))

:: Выводим все в одну переменную плюс накопительную всех циклов
::SET OUTSETI=!OUTSETI!IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT% %IPC% ^&echo.& exit /b
:: Выводим строки в файл OUTSETI.TXT
SET OUTSETI=WINSCANSETI=IP:%IP%.%1 MAC:%MAC% NAME:%NAME% %NETBIOS% SHARE:%DISK%%PRINT%%IPC% NOFILTR:%GROUP%
:: Вывод в кодировке UTF-8
chcp 65001 > nul
echo %OUTSETI% >> %~dp0OUTSETI.TXT
:: Возврат кодировки
chcp %kodstr:~1% > nul
setlocal DISABLEDELAYEDEXPANSION

:end

:: Удаление старых логов более 31 день
::forfiles /p "%~dp0logseti" /S /D -31 /C "cmd /c del /f /a /q @file"
Версия 2.3 поправлена обрезка по разным ip сетям
::Получаем просто подсеть из начала совпадения строки более правильно чем dns
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "IP"^|FINDSTR /c:"192.168." /c:"172.16."') do (
:: Так как ip разной длинны обрезка :~1.10% нам не подходит разбиваем на октеты
for /f "tokens=1-4 delims=. " %%k in ("%%a") do set IP=%%k.%%l.%%m
)
Scan-seti2.3.bat
Показать
@ECHO OFF
mode con:cols=130 lines=1000
color 1A
:: Автор Мамзиков Артём Андреевич
:: V 2.3 14.11.2020
TITLE Skanirovanie Seti Poluchenie Dostupnih IP IMYa MAC SHARE

:: Определение текущей кодировки может отличатся 866 и 1251
for /f "tokens=2 delims=:" %%a in ('chcp') do set "kodstr=%%a"

::Удаление старого файла
del /F /Q /A:H %~dp0OUTSETI.TXT
::Создать скрытый временный файл для построчного лога
echo LOG %date% %TIME:~,-3%=>%~dp0OUTSETI.TXT
::copy /b NUL %~dp0OUTSETI.TXT
attrib +h %~dp0OUTSETI.TXT

::Получаем просто подсеть из начала совпадения строки более правильно чем dns
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "IP"^|FINDSTR /c:"192.168." /c:"172.16."') do (
:: Так как ip разной длинны обрезка :~1.10% нам не подходит разбиваем на октеты
for /f "tokens=1-4 delims=. " %%k in ("%%a") do set IP=%%k.%%l.%%m
)

setlocal enabledelayedexpansion
:: Перебор IP
for /L %%b in (1,1,255) do call:scan %%b
::Вывод результатов сканирования сети
::echo %OUTSETI%

curl -X POST -H --silent --data-binary "@%~dp0OUTSETI.TXT" https://сайт.ru/glpi/data_server/data.php

goto:eof

:scan
::Проверка Пингом. Недоступность, строка символов "TTL" в выводимых результатах отсутствует. Если строка символов "TTL" найдена, то FIND сформирует значение переменной ERRORLEVEL равным 0
ping -n 1 -w 1000 %IP%.%1 | find /I "TTL" > nul
if %ERRORLEVEL%==0 (goto :YesPing) else (goto :end)

:: Еще один вызов из-за 2 команды мака, в общем цикле 1 мака если не нашло 2 часть не выполняется, в раздельном виде не передается переменная так как закрыто было циклом пинга!
:YesPing
:: Очистка обнуление перменных в цикле из буфера там где их нет
set "MAC="
set "NAME="
set "DISK="
set "PRINT="
set "IPC="
:: Запрос Имени
For /f "tokens=4 delims= " %%d in ('ping -a -n 1 -w 0 %IP%.%1^|FIND /I "["') do set NAME=%%d
:: Запрос MAC
For /f "tokens=5 delims= " %%e in ('nbtstat -a %IP%.%1^|FIND /I "MAC"') do set MAC=%%e
::Если MAC не определился, пробуем 2-ой командой
IF %MAC%1==1 For /f "tokens=2 delims= " %%l in ('arp -a %IP%.%1^|FIND /I "%IP%.%1"') do set MAC=%%l
:: Расшаренные сетевые ресурсы (не работает на XP net view \\IP /all работает только без /all так net view \\IP)
FOR /F "skip=2 delims= tokens=1-4" %%f IN ('net view \\%IP%.%1 /all^|FIND " "') do (
set f=%%f
set f=!f: =:!
::echo !f!
:: Более точно разделим столбцы по 2 пробелам выставим : будет означать новый столбец
FOR /F "delims=: tokens=1,2,3,4" %%g in ("!f!") do (
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF "%%h"=="„ЁбЄ" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF "%%h"=="ЏҐз вм" set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i )
IF /i "%%h"=="Disk" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF /i "%%h"=="Print" (set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE IF /i "%%h"=="IPC" (set IPC=!IPC!%%h: \\%IP%.%1\%%g comm:%%i ))))
:: Выводим все в одну переменную плюс накопительную всех циклов
::SET OUTSETI=!OUTSETI!IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT% %IPC% ^&echo.& exit /b
:: Выводим строки в файл OUTSETI.TXT
SET OUTSETI=WINSCANSETI=IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT%%IPC%
:: Вывод в кодировке UTF-8
chcp 65001 > nul
echo %OUTSETI% >> %~dp0OUTSETI.TXT
:: Возврат кодировки
chcp %kodstr:~1% > nul
setlocal DISABLEDELAYEDEXPANSION

:end

:: Удаление старых логов более 31 день
::forfiles /p "%~dp0logseti" /S /D -31 /C "cmd /c del /f /a /q @file"
V 2.2 Добавлен вывод в файл построчно, так как эхо построчно выводит, а переменная нет, идет как одной строкой пришлось сделать в файл с его очисткой
Scan-seti2.2.bat
Показать
@ECHO OFF
mode con:cols=130 lines=1000
color 1A
:: Автор Мамзиков Артём Андреевич
:: V 2.2 12.10.2020
TITLE Skanirovanie Seti Poluchenie Dostupnih IP IMYa MAC SHARE

:: Определение текущей кодировки может отличатся 866 и 1251
for /f "tokens=2 delims=:" %%a in ('chcp') do set "kodstr=%%a"

::Удаление старого файла
del /F /Q /A:H %~dp0OUTSETI.TXT
::Создать скрытый временный файл для построчного лога
echo LOG %date% %TIME:~,-3%=>%~dp0OUTSETI.TXT
::copy /b NUL %~dp0OUTSETI.TXT
attrib +h %~dp0OUTSETI.TXT

::Получаем просто подсеть из начала совпадения сторки более правильно чем dns
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "IP"^|FINDSTR /c:"192.168." /c:"172.16."') do set IPDNS=%%a
set IP=%IPDNS:~1,11%

setlocal enabledelayedexpansion
:: Перебор IP
for /L %%b in (1,1,255) do call:scan %%b
::Вывод результатов сканирования сети
::echo %OUTSETI%

curl -X POST -H --silent --data-binary "@%~dp0OUTSETI.TXT" https://сайт.ru/glpi/data_server/data.php

goto:eof

:scan
::Проверка Пингом. Недоступность, строка символов "TTL" в выводимых результатах отсутствует. Если строка символов "TTL" найдена, то FIND сформирует значение переменной ERRORLEVEL равным 0
ping -n 1 -w 1000 %IP%.%1 | find /I "TTL" > nul
if %ERRORLEVEL%==0 (goto :YesPing) else (goto :end)

:: Еще один вызов из-за 2 команды мака, в общем цикле 1 мака если не нашло 2 часть не выполняется, в раздельном виде не передается переменная так как закрыто было циклом пинга!
:YesPing
:: Очистка обнуление переменных в цикле из буфера там где их нет
set "MAC="
set "NAME="
set "DISK="
set "PRINT="
set "IPC="
:: Запрос Имени
For /f "tokens=4 delims= " %%d in ('ping -a -n 1 -w 0 %IP%.%1^|FIND /I "["') do set NAME=%%d
:: Запрос MAC
For /f "tokens=5 delims= " %%e in ('nbtstat -a %IP%.%1^|FIND /I "MAC"') do set MAC=%%e
::Если MAC не определился, пробуем 2-ой командой
IF %MAC%1==1 For /f "tokens=2 delims= " %%l in ('arp -a %IP%.%1^|FIND /I "%IP%.%1"') do set MAC=%%l
:: Расшаренные сетевые ресурсы (не работает на XP net view \\IP /all работает только без /all так net view \\IP)
FOR /F "skip=2 delims= tokens=1-4" %%f IN ('net view \\%IP%.%1 /all^|FIND " "') do (
set f=%%f
set f=!f: =:!
::echo !f!
:: Более точно разделим столбцы по 2 пробелам выставим : будет означать новый столбец
FOR /F "delims=: tokens=1,2,3,4" %%g in ("!f!") do (
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF "%%h"=="„ЁбЄ" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF "%%h"=="ЏҐз вм" set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i )
IF /i "%%h"=="Disk" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF /i "%%h"=="Print" (set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE IF /i "%%h"=="IPC" (set IPC=!IPC!%%h: \\%IP%.%1\%%g comm:%%i ))))
:: Выводим все в одну переменную плюс накопительную всех циклов
::SET OUTSETI=!OUTSETI!IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT% %IPC% ^&echo.& exit /b
:: Выводим строки в файл OUTSETI.TXT
SET OUTSETI=WINSCANSETI=IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT%%IPC%
:: Вывод в кодировке UTF-8
chcp 65001 > nul
echo %OUTSETI% >> %~dp0OUTSETI.TXT
:: Возврат кодировки
chcp %kodstr:~1% > nul
setlocal DISABLEDELAYEDEXPANSION

:end

:: Удаление старых логов более 31 день
::forfiles /p "%~dp0logseti" /S /D -31 /C "cmd /c del /f /a /q @file"
V2.1 - для 2х подсетей
минус плохо режет IP адрес %IPDNS:~1,11% если количество цифр разное в ip адресах где то надо 1.11 или 1.10 или 1.9 обрезку делать
Scan-seti2.1.bat
Показать
@ECHO OFF
mode con:cols=130 lines=1000
color 1A
:: Автор Мамзиков Артём Андреевич
:: V 2.1 31.08.2020
TITLE Skanirovanie Seti Poluchenie Dostupnih IP IMYa MAC SHARE

::Получаем просто подсеть из начала совпадения строки более правильно чем dns
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "IP"^|FINDSTR /c:"192.168." /c:"172.16."') do set IPDNS=%%a
set IP=%IPDNS:~1,11%

setlocal enabledelayedexpansion
:: Перебор IP
for /L %%b in (1,1,255) do call:scan %%b
::Вывод результатов сканирования сети
curl -X POST -d "%OUTSETI%" https://DNS/glpi/data_server/data.php
::echo %OUTSETI%

pause
goto:eof

:scan
::Проверка Пингом. Недоступность, строка символов "TTL" в выводимых результатах отсутствует. Если строка символов "TTL" найдена, то FIND сформирует значение переменной ERRORLEVEL равным 0
ping -n 1 -w 1000 %IP%.%1 | find /I "TTL" > nul
if %ERRORLEVEL%==0 (goto :YesPing) else (goto :end)

:: Еще один вызов из-за 2 команды мака, в общем цикле 1 мака если не нашло 2 часть не выполняется, в раздельном виде не передается переменная так как закрыто было циклом пинга!
:YesPing
:: Очистка обнуление переменных в цикле из буфера там где их нет
set "MAC="
set "NAME="
set "DISK="
set "PRINT="
set "IPC="
:: Запрос Имени
For /f "tokens=4 delims= " %%d in ('ping -a -n 1 -w 0 %IP%.%1^|FIND /I "["') do set NAME=%%d
:: Запрос MAC
For /f "tokens=5 delims= " %%e in ('nbtstat -a %IP%.%1^|FIND /I "MAC"') do set MAC=%%e
::Если MAC не определился, пробуем 2-ой командой
IF %MAC%1==1 For /f "tokens=2 delims= " %%l in ('arp -a %IP%.%1^|FIND /I "%IP%.%1"') do set MAC=%%l
:: Расшаренные сетевые ресурсы (не работает на XP net view \\IP /all работает только без /all так net view \\IP)
FOR /F "skip=2 delims= tokens=1-4" %%f IN ('net view \\%IP%.%1 /all^|FIND " "') do (
set f=%%f
set f=!f: =:!
::echo !f!
:: Более точно разделим столбцы по 2 пробелам выставим : будет означать новый столбец
FOR /F "delims=: tokens=1,2,3,4" %%g in ("!f!") do (
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF "%%h"=="„ЁбЄ" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF "%%h"=="ЏҐз вм" set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i )
IF /i "%%h"=="Disk" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF /i "%%h"=="Print" (set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE IF /i "%%h"=="IPC" (set IPC=!IPC!%%h: \\%IP%.%1\%%g comm:%%i ))))
:: Выводим все в одну переменную плюс накопительную всех циклов
::SET OUTSETI=!OUTSETI!IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT% %IPC% ^&echo.& exit /b
SET OUTSETI=!OUTSETI!WINSCANSETI=IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT%%IPC% ^&echo.& exit /b
setlocal DISABLEDELAYEDEXPANSION

:end

:: Удаление старых логов более 31 день
::forfiles /p "%~dp0logseti" /S /D -31 /C "cmd /c del /f /a /q @file"

V2.0 изменено определение столбцов в net view \\192.168.ххх.ххх /all где 2 пробела и больше заменить на : и определяем по : столбцы
где не поддерживается /all убрать не будут выводится скрытые ресурсы с $ в конце

В кодировке 1251
Scan-seti2.bat
Показать
@ECHO OFF
mode con:cols=130 lines=1000
color 1A
:: Автор Мамзиков Артём Андреевич
:: V 2.1 31.08.2020
TITLE Skanirovanie Seti Poluchenie Dostupnih IP IMYa MAC SHARE

::Получаем просто подсеть из начала совпадения сторки более правильно чем dns
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "192.168.1"') do set IPDNS=%%a
set IP=%IPDNS:~1,11%

setlocal enabledelayedexpansion
:: Перебор IP
for /L %%b in (1,1,255) do call:scan %%b
::Вывод результатов сканирования сети
echo %OUTSETI%

pause
goto:eof

:scan
::Проверка Пингом. Недоступность, строка символов "TTL" в выводимых результатах отсутствует. Если строка символов "TTL" найдена, то FIND сформирует значение переменной ERRORLEVEL равным 0
ping -n 1 -w 1000 %IP%.%1 | find /I "TTL" > nul
if %ERRORLEVEL%==0 (goto :YesPing) else (goto :end)

:: Еще один вызов из-за 2 команды мака, в общем цикле 1 мака если не нашло 2 часть не выполняется, в раздельном виде не передается переменная так как закрыто было циклом пинга!
:YesPing
:: Очистка обнуление перменных в цикле из буфера там где их нет
set "MAC="
set "NAME="
set "DISK="
set "PRINT="
:: Запрос Имени
For /f "tokens=4 delims= " %%d in ('ping -a -n 1 -w 0 %IP%.%1^|FIND /I "["') do set NAME=%%d
:: Запрос MAC
For /f "tokens=5 delims= " %%e in ('nbtstat -a %IP%.%1^|FIND /I "MAC"') do set MAC=%%e
::Если MAC не определился, пробуем 2-ой командой
IF %MAC%1==1 For /f "tokens=2 delims= " %%l in ('arp -a %IP%.%1^|FIND /I "%IP%.%1"') do set MAC=%%l
:: Расшаренные сетевые ресурсы (не работает на XP net view \\IP /all работает только без /all так net view \\IP)
FOR /F "skip=2 delims= tokens=1-4" %%f IN ('net view \\%IP%.%1 /all^|FIND " "') do (
set f=%%f
set f=!f: =:!
::echo !f!
:: Более точно разделим столбцы по 2 пробелам выставим : будет означать новый столбец
FOR /F "delims=: tokens=1,2,3,4" %%g in ("!f!") do (
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF "%%h"=="„ЁбЄ" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF "%%h"=="ЏҐз вм" set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i )
IF /i "%%h"=="Disk" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE (IF /i "%%h"=="Print" (set PRINT=!PRINT!%%h: \\%IP%.%1\%%g comm:%%i ) ELSE IF /i "%%h"=="IPC" (set IPC=!IPC!%%h: \\%IP%.%1\%%g comm:%%i ))))
:: Выводим все в одну переменную плюс накопительную всех циклов
SET OUTSETI=!OUTSETI!IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT% %IPC% ^&echo.& exit /b
setlocal DISABLEDELAYEDEXPANSION

:end

:: Удаление старых логов более 31 день
::forfiles /p "%~dp0logseti" /S /D -31 /C "cmd /c del /f /a /q @file"

V 1.0 27.08.2020
Тут есть момент по расшареным устройствам например
Имя общего ресурса Тип Используется как Комментарий

-----------------------------------------------------------------------
ADMIN$ Диск Удаленный Admin
C$ Диск Стандартный общий ресурс
D$ Диск Стандартный общий ресурс
IPC$ IPC Удаленный IPC
Kyocera FS-4020DN KX Печать Kyocera FS-4020DN KX
print$ Диск Драйверы принтеров
Команда выполнена успешно.

Определение столбцов по пробелам а в 1 столбце Kyocera FS-4020DN KX есть 2 пробела и в место типа Печать получаем FS-4020DN
Scan-seti1.bat
Показать
@ECHO OFF
mode con:cols=130 lines=1000
color 1A
:: Автор Мамзиков Артём Андреевич
:: V 1.0 27.08.2020
TITLE Skanirovanie Seti Poluchenie Dostupnih IP IMYa MAC SHARE

::Получаем просто подсеть из начала совпадения строки более правильно чем dns
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "192.168.1"') do set IPDNS=%%a
set IP=%IPDNS:~1,11%

setlocal enabledelayedexpansion
:: Перебор IP
for /L %%b in (1,1,255) do call:scan %%b
::Вывод результатов сканирования сети
echo %OUTSETI%

pause
goto:eof

:scan
::Проверка Пингом. Недоступность, строка символов "TTL" в выводимых результатах отсутствует. Если строка символов "TTL" найдена, то FIND сформирует значение переменной ERRORLEVEL равным 0
ping -n 1 -w 1000 %IP%.%1 | find /I "TTL" > nul
if %ERRORLEVEL%==0 (goto :YesPing) else (goto :end)

:: Еще один вызов из-за 2 команды мака, в общем цикле 1 мака если не нашло 2 часть не выполняется, в раздельном виде не передается переменная так как закрыто было циклом пинга!
:YesPing
:: Очистка обнуление перменных в цикле из буфера там где их нет
set "MAC="
set "NAME="
set "DISK="
set "PRINT="
:: Запрос Имени
For /f "tokens=4 delims= " %%d in ('ping -a -n 1 -w 0 %IP%.%1^|FIND /I "["') do set NAME=%%d
:: Запрос MAC
For /f "tokens=5 delims= " %%e in ('nbtstat -a %IP%.%1^|FIND /I "MAC"') do set MAC=%%e
::Если MAC не определился, пробуем 2-ой командой
IF %MAC%1==1 For /f "tokens=2 delims= " %%l in ('arp -a %IP%.%1^|FIND /I "%IP%.%1"') do set MAC=%%l
:: Расшаренные сетевые ресурсы (работает если между расшаренным и типом 1 пробел, если пробел не один до типа то не отработает)
FOR /F "skip=2 tokens=1,2,3,4 delims= " %%f IN ('net view \\%IP%.%1^|FIND " "') do (
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF "%%g"=="„ЁбЄ" ( set DISK=!DISK!%%g: \\%IP%.%1\%%f ) ELSE ( IF "%%g"=="ЏҐз вм" set PRINT=!PRINT!%%g: \\%IP%.%1\%%f )
IF "%%g"=="Disk" ( set DISK=!DISK!%%g: \\%IP%.%1\%%f ) ELSE ( IF "%%g"=="Print" set PRINT=!PRINT!%%g: \\%IP%.%1\%%f ))
:: Выводим все в одну переменную плюс накопительную всех циклов
SET OUTSETI=!OUTSETI!IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT% ^&echo.& exit /b
setlocal DISABLEDELAYEDEXPANSION

:end

:: Удаление старых логов более 31 день
::forfiles /p "%~dp0logseti" /S /D -31 /C "cmd /c del /f /a /q @file"
Предыдущие варианты
Показать
::@ECHO OFF
mode con:cols=130 lines=130
color 1A
::chcp 1251 >NUL
TITLE Skanirovanie Seti Poluchenie Dostupnih IP IMYa MAC SHARE

::Получаем просто подсеть из начала совпадения сторки более правильно чем dns
for /f "tokens=2 delims=:(" %%a in ('ipconfig /all^|FIND /I "192.168.2"') do set IPDNS=%%a
set IP=%IPDNS:~1,11%

SETLOCAL
:: Перебор IP
for /L %%b in (3,1,255) do call:scan %%b
........
goto:eof


:scan
::Проверка Пингом. Недоступность, строка символов "TTL" в выводимых результатах отсутствует. Если строка символов "TTL" найдена, то FIND сформирует значение переменной ERRORLEVEL равным 0
ping -n 1 -w 1000 %IP%.%1 | find /I "TTL" > nul
if %ERRORLEVEL%==0 (
:: Запрос Имени
For /f "tokens=4 delims= " %%d in ('ping -a -n 1 -w 0 %IP%.%1^|FIND /I "["') do (
set NAME=%%d
:: Запрос MAC
For /f "tokens=2 delims= " %%e in ('arp -a %IP%.%1^|FIND /I "%IP%.%1"') do (
set MAC=%%e
:: Расшаренные сетевые ресурсы
FOR /F "skip=2 tokens=1,2,3,4 delims= " %%f IN ('net view \\%IP%.%1^|FIND " "') do (
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF "%%g"=="„ЁбЄ" ( set DISK=%%g: \\%IP%.%1\%%f ) ELSE ( IF "%%g"=="ЏҐз вм" set PRINT=%%g: \\%IP%.%1\%%f )
IF "%%g"=="Disk" ( set DISK=%%g: \\%IP%.%1\%%f ) ELSE ( IF "%%g"=="Print" set PRINT=%%g: \\%IP%.%1\%%f )
)))) else (echo %IP%.%1 noping)
echo IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT%


:: Удаление старых логов более 31 день
::forfiles /p "%~dp0logseti" /S /D -31 /C "cmd /c del /f /a /q @file"
pause



Первый цикл
FOR ** in *** do (

FOR ** in *** do set выдает строчную переменную для этой же строки команды
set уже не выдает
)

Другой вариант
Первый цикл
FOR ** in *** do (

FOR ** in *** do (
set выдает переменную в текущие скобки 2рого цикла
но если 2 цикл не отработал не выполнилась команда или не было данных, то если есть 3 подцикл он выполнятся не будет нужно делить на отдельные циклы
FOR ** in *** do ( )
)
)

Но отдельные циклы не передают переменную, в другие строки если они заключенный в общий первый цикл тут помогает только вариант
if %Переменная сравнения%==0 (goto :YesPing) else (goto :end)

:YesPing
тут отдельные циклы не заключенные в общий но зависит от первого через вызов

Перевод на новую строку переменная %n%
set n=^&echo.

Вывод переменной за пределы цикла возврат в основной цикл пример
@echo off

if "2"=="" (
echo Peredayte parametry scenariju!) & (goto EXIT)
setlocal enabledelayedexpansion
call :FACT 8
echo %Result%
pause
goto :EXIT

:FACT
if %1 == 0 (set Result=1 & exit /b)
if %1 == 1 (set Result=9 & exit /b)

set /A PARAM=%1 - 1
call :FACT %PARAM%
set /A Result=%1 * %Result%
setlocal DISABLEDELAYEDEXPANSION
exit /b

:EXIT
Разные попытки
Показать
:: Расшаренные сетевые ресурсы (работает если между расшаренным и типом 1 пробел, если пробел не один до типа то не отработает)
попытка вывести все строки
FOR /F "skip=2 delims= tokens=1-4" %%f IN ('net view \\%IP%.%1 /all^|FIND " "') do set share=%%f
:: Более точно разделим столбцы по 2 пробелам выставим : будет означать новый столбец
В переменную поподает 1 последняя строка set share=%%f ,а если так set share=!share!%%f то все в одной строке весь вывод
set share=!share!^%%f не помогает , если только для для вывода в echo то set share=!share!^&echo.%%f работает но надо нам в переменную и тудя тянется весь текст а не перенос.
для того что бы преобразовать нам нужна переменная вида %переменная% будет приобразование 2 пробела на : %переменная: =:%
а переменная такого вида из цикла не идет %%f: =: - работать не будет.

Дальше попытки создать это все в одном цикле с подциклами у нас не работает переменная set
Сделать вывод сразу с :: в место пробелов получаем опять все в одной строке либо только первую переменную на обработке

FOR /F "delims=: tokens=1,2,3,4" %%g in ("%share: =:%") do (
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF "%%h"=="„ЁбЄ" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g ) ELSE (IF "%%h"=="ЏҐз вм" set PRINT=!PRINT!%%h: \\%IP%.%1\%%g )
IF /i "%%h"=="Disk" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g ) ELSE (IF /i "%%h"=="Print" (set PRINT=!PRINT!%%h: \\%IP%.%1\%%g ) ELSE IF /i "%%h"=="IPC" (set IPC=!IPC!%%h: \\%IP%.%1\%%g ))))

И по итогуу выходит у нас вот так
:: Расшаренные сетевые ресурсы
FOR /F "skip=2 delims= tokens=1-4" %%f IN ('net view \\192.168.101.10 /all^|FIND " "') do (
set f=%%f
set f=!f: =:!
echo !f!
:: Более точно разделим столбцы по 2 пробелам выставим : будет означать новый столбец
FOR /F "delims=: tokens=1,2,3,4" %%g in ("!f!") do (
:: Слово Диск в кодировке dos cp866 „ЁбЄ Слово Печать ЏҐз вм
IF "%%h"=="„ЁбЄ" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g ) ELSE (IF "%%h"=="ЏҐз вм" set PRINT=!PRINT!%%h: \\%IP%.%1\%%g )
IF /i "%%h"=="Disk" ( set DISK=!DISK!%%h: \\%IP%.%1\%%g ) ELSE (IF /i "%%h"=="Print" (set PRINT=!PRINT!%%h: \\%IP%.%1\%%g ) ELSE IF /i "%%h"=="IPC" (set IPC=!IPC!%%h: \\%IP%.%1\%%g ))))
:: Выводим все в одну переменную плюс накопительную всех циклов
SET OUTSETI=!OUTSETI!IP:%IP%.%1 MAC:%MAC% NAME:%NAME% SHARE:%DISK%%PRINT% %IPC% ^&echo.& exit /b
setlocal DISABLEDELAYEDEXPANSION
количество слов: 3916
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 804
Стаж: 5 лет 1 месяц
Откуда: Вологодская область
Поблагодарили: 33 раза
Контактная информация:

Сканирование сети Скриптом BAT cmd на Windows

Сообщение Артём Мамзиков »

Авто Установка Скрипта Сканирования Сети На Подсети

Скачать пример
auto-nstall-scan-seti-windows.zip
auto-nstall-scan-seti-windows.zip
(316.77 КБ) 40 скачиваний
Ставить будем на файловый сервер в планировщик заданий 3 раза в сутки запуск

1 Установка Curl если не установлен и добавление переменной на его
Само распаковывающийся архив мы сделали в предыдущем посте
Установка Curl на Windows самораспаковывающимся архивом
1-autoInstall-32-64Bit-curl.bat
Показать
@echo off
color 1a

SETLOCAL
:: Перебор IP подсетей с 1 по 28
for /L %%a in (101,1,128) do call:install %%a
........
goto:eof

:install
:: Переменная для преобразования значения (номер сети)
set NO=%1
:: Команда удаленного выполнения и авторизации
"%~dp0"psexec64.exe -u Администратор -p Паро%NO:~1,2%ль \\192.168.%1.8 -d -c Install-32-64Bit-curl
2 Непосредственная установка скрипта на сервер
2-autoInstall-na-podseti-chcp-886.bat
Показать
@echo off
color 1a

SETLOCAL
:: Перебор IP подсетей с 1 по 28
for /L %%a in (101,1,128) do call:install %%a
........
goto:eof

:install
:: Переменная для преобразования значения (номер сети)
set NO=%1
:: Команда удаленного выполнения и авторизации
"%~dp0"psexec64.exe -u Администратор -p Паро%NO:~1,2%ль \\192.168.%1.8 -c Install-Scan-seti
Самораспаковывающийся архив Install-Scan-seti.exe
Как его сделать я рассказывал 7-Zip и Саморапаковываюшийся архив SFX
Внутри архива Install-Scan-seti.exe у нас 3 файла
сам батник сканирования сети Scan-seti2.3.bat
Выгруженная задача из планировщика ScanSeti.xml
Скрипт для всего этого установки Install-Scan-seti.bat
Install-Scan-seti.bat
Показать
@echo off
color 1a

TITLE install Scan-seti
:: Копируем скрипт в папку к заббиксу
xcopy "%~dp0"Scan-seti2.3.bat "C:\zabbix" /s /e /y /v

::Планировщик заданий
::SCHTASKS /Create /SC DAILY /tn "Scan-seti" /TR "'C:\zabbix\Scan-seti2.3.bat'" /ST 10:01:00 /F
:: Уже готовая задача в XML делаем импорт (от Администратора)
SCHTASKS /Create /tn "Scan-seti" /XML "%~dp0ScanSeti.xml"
Можно создать свою задачу в планировщике и выгрузить в xml формате
ScanSeti.xml
Показать
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.3" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2020-11-06T18:15:45.1612455</Date>
<Author>FS\Admin</Author>
</RegistrationInfo>
<Triggers>
<CalendarTrigger>
<StartBoundary>2020-11-06T08:45:00</StartBoundary>
<Enabled>true</Enabled>
<ScheduleByDay>
<DaysInterval>1</DaysInterval>
</ScheduleByDay>
</CalendarTrigger>
<CalendarTrigger>
<StartBoundary>2020-11-06T14:45:00</StartBoundary>
<Enabled>true</Enabled>
<ScheduleByDay>
<DaysInterval>1</DaysInterval>
</ScheduleByDay>
</CalendarTrigger>
<CalendarTrigger>
<StartBoundary>2020-11-06T20:45:00</StartBoundary>
<Enabled>true</Enabled>
<ScheduleByDay>
<DaysInterval>1</DaysInterval>
</ScheduleByDay>
</CalendarTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>S-1-5-19</UserId>
<RunLevel>HighestAvailable</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>true</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>false</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>true</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
<UseUnifiedSchedulingEngine>false</UseUnifiedSchedulingEngine>
<WakeToRun>true</WakeToRun>
<ExecutionTimeLimit>PT2H</ExecutionTimeLimit>
<Priority>7</Priority>
<RestartOnFailure>
<Interval>PT30M</Interval>
<Count>3</Count>
</RestartOnFailure>
</Settings>
<Actions Context="Author">
<Exec>
<Command>C:\zabbix\Scan-seti2.3.bat</Command>
</Exec>
</Actions>
</Task>

Приберемся за собой
3-remove-dir-install-na-podseti.bat
3-remove-dir-install-na-podseti.bat
Показать
@echo off
color 1a

SETLOCAL
:: Перебор IP подсетей с 1 по 28
for /L %%a in (101,1,128) do call:install %%a
........
goto:eof

:install
:: Переменная для преобразования значения (номер сети)
set NO=%1
:: Команда удаленного выполнения и авторизации
"%~dp0"psexec64.exe -u Администратор -p Паро%NO:~1,2%ль \\192.168.%1.8 -c remove-install.bat
remove-install.bat
Показать
@echo off
color 1a
CD C:\Windows\
RD /S /Q "Install-32-64Bit-curl"
RD /S /Q "Install-Scan-seti"
erase Install-32-64Bit-curl.exe
erase Install-Scan-seti.exe
количество слов: 465
Ответить Вложения 3 Пред. темаСлед. тема

Вернуться в «Сканирование сети получение Логина пользователя»