Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Перебор свободных IP по списку и выбор свободного

Ответить
Настройки темы
CMD/BAT - [решено] Перебор свободных IP по списку и выбор свободного

Аватара для Debugger

Ветеран


Сообщения: 867
Благодарности: 70


Конфигурация

Профиль | Отправить PM | Цитировать


Цель такая - имеется несколько свободных IP-адресов, которые используются не постоянно, а только на момент подготовки компьютеров к работе - установка ОС, софта, назначение уже постоянного другого IP адреса и выдача сотруднику. Сваял батник, который при первом входе в систему назначает компьютеру временный и заведомо никем не используемый IP-адрес, затем пингует остальные по списку и назначает уже другой - свободный (DHCP отключен). После чего установка софта запускается уже по сетке. Батник получился довольно громоздким, все думаю как бы его уменьшить (просто из спортивного интереса), или может быть можно сделать вообще как-то по-другому? И хочу чтобы был только один файл.
Код: Выделить весь код
reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters /v SearchList /t REG_SZ /d zavod.loc /f
reg add HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters /v SearchList /t REG_SZ /d zavod.loc /f
echo pushd interface ip > c:\ipconfig
echo set address name="Подключение по локальной сети" source=static addr=192.168.9.192 mask=255.255.252.0 >> c:\ipconfig
echo set address name="Подключение по локальной сети" gateway=192.168.10.199 gwmetric=0 >> c:\ipconfig
echo set dns name="Подключение по локальной сети" source=static addr=192.168.10.5 register=PRIMARY >> c:\ipconfig
echo add dns name="Подключение по локальной сети" addr=192.168.10.171 index=2 >> c:\ipconfig
echo set wins name="Подключение по локальной сети" source=static addr=none >> c:\ipconfig
echo popd >> c:\ipconfig
netsh exec c:\ipconfig
del /q c:\ipconfig

for %%I in (245,246,247,248) do ping 192.168.9.%%I -n 3 | find /I "TTL" || (set freeIP=%%I & goto :setip)
echo "Нет свободных адресов" & pause & exit

:setip
echo pushd interface ip > c:\ipconfig
echo set address name="Подключение по локальной сети" source=static addr=192.168.9.%freeIP% mask=255.255.252.0 >> c:\ipconfig
echo set address name="Подключение по локальной сети" gateway=192.168.10.199 gwmetric=0 >> c:\ipconfig
echo set dns name="Подключение по локальной сети" source=static addr=192.168.10.5 register=PRIMARY >> c:\ipconfig
echo add dns name="Подключение по локальной сети" addr=192.168.10.171 index=2 >> c:\ipconfig
echo set wins name="Подключение по локальной сети" source=static addr=none >> c:\ipconfig
echo popd >> c:\ipconfig
netsh exec c:\ipconfig
del /q c:\ipconfig

Отправлено: 14:19, 10-02-2012

 

Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Именно для этого и придумывали DHCP - почему же его не использовать в своей лабораторной сети?

Отправлено: 11:39, 11-02-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Debugger

Ветеран


Сообщения: 867
Благодарности: 70

Профиль | Отправить PM | Цитировать


Нет возможности включить DHCP - сеть общая, заводская.

Отправлено: 12:47, 11-02-2012 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Debugger:
Батник получился довольно громоздким, все думаю как бы его уменьшить (просто из спортивного интереса) »
1. В общем и целом — имеет смысл для повторяющегося текста использовать переменные. Скажем, у Вас многократно идёт текст «Подключение по локальной сети», идентифицирующий подключение. Может быть, стоит даже захватить чуть больше — вместе с «name=…».

Т.е., что-то наподобие:
Код: Выделить весь код
set sName=name="Подключение по локальной сети"
…
echo set address %sName% source=static addr=192.168.9.192 mask=255.255.252.0 >> c:\ipconfig
echo set address %sName% gateway=192.168.10.199 gwmetric=0 >> c:\ipconfig
echo set dns %sName% source=static addr=192.168.10.5 register=PRIMARY >> c:\ipconfig
То же относится и к имени файла, куда мы выводим — лучше его один раз определить через переменную, затем использовать эту переменную в коде (см. также п.2).

2. Чтобы не писать в каждой команде перенаправление вывода — можно оформить их операторными скобками, за/перед которыми уже и использовать перенаправление. Наподобие:
Код: Выделить весь код
set sFileOut=c:\ipconfig.txt
set sName=name="Подключение по локальной сети"
…
…
>"%sFileOut%" (
	echo pushd interface ip
	echo set address %sName% source=static addr=192.168.9.192 mask=255.255.252.0
	echo set address %sName% gateway=192.168.10.199 gwmetric=0
	echo set dns     %sName% source=static addr=192.168.10.5 register=PRIMARY
	echo add dns     %sName% addr=192.168.10.171 index=2
	echo set wins    %sName% source=static addr=none
	echo popd
)
netsh exec "%sFileOut%"
del /q "%sFileOut%"
…
…
Как Вы поняли — это всё «косметика».
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:32, 11-02-2012 | #4


Аватара для Debugger

Ветеран


Сообщения: 867
Благодарности: 70

Профиль | Отправить PM | Цитировать


Цитата Iska:
В общем и целом — имеет смысл для повторяющегося текста использовать переменные. »
Вот это - да, непростительно. Надо было догадаться.
Цитата Iska:
Как Вы поняли — это всё «косметика». »
Вот именно "косметику" я и имел в виду, спасибо за предложения. Про конструкцию
Код: Выделить весь код
>"%sFileOut%" (
	echo pushd interface ip
	echo set address %sName% source=static addr=192.168.9.192 mask=255.255.252.0
	echo set address %sName% gateway=192.168.10.199 gwmetric=0
	echo set dns     %sName% source=static addr=192.168.10.5 register=PRIMARY
	echo add dns     %sName% addr=192.168.10.171 index=2
	echo set wins    %sName% source=static addr=none
	echo popd)
- я вообще не знал, что такое допускается в батниках. Тему отмечаю решенной.

Отправлено: 17:42, 11-02-2012 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Перебор свободных IP по списку и выбор свободного

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] BATник на перебор ресурсов Lem_ON Скриптовые языки администрирования Windows 3 22-06-2011 09:12
V. 2010 - Список свободных комнат. DJ Mogarych Microsoft Exchange Server 0 16-02-2011 13:35
Перебор контролов w3d1 AutoIt 8 04-09-2009 12:35
Перебор в твиках! lmn Автоматическая установка Windows 2000/XP/2003 2 30-07-2005 02:47
Как на Perl'е написать перебор символов?? JS Программирование и базы данных 2 16-10-2003 09:03




 
Переход