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

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

Ответить
Настройки темы
CMD/BAT - [решено] Тестирование сетки.

Новый участник


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

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


Возникла необходимость тестировать сеть, чтобы определить работающее оборудование.
Имеется Excel-ский файл, состоит из нескольких столбцов. В 14 столбце занесены IP адреса. Нужно взять IP, пингануть и результат пингов записать в следующий столбец т.е сформировать 15 столбец с результатами, если хоть один пинг прошёл то результат ОК, если нет то строку оставить пустым. Затем переход на следующую строку.
и так до конца столбца. Всего 1000 строк. Желательно, чтобы можно былобы регулировать количество пингов.
Буду очень признателен за помощь.

Отправлено: 15:32, 12-10-2010

 

Старожил


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

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


1. Для работы с таблицами Вам скорее всего придется использовать VBS, особливо учитывая, что он уже встроен в Exel...
2. Если заменить таблицу на текстовый файл, то можно сделать так (на базе старого отчета по пингам):
Код: Выделить весь код
@Echo off
setLocal EnableExtensions

set tm=%time::=%
set tm=%tm:~0,-3%
set dt=%date:~8,2%%date:~3,2%%date:~0,2%

for /f "UseBackQ tokens=1,*" %%A in ("%~n0.txt") do call :Ping %%A "%%B"
del /f "%~n0.old" >nul 2>nul
ren "%~n0.txt" *.old 2>nul
ren "%~n0.tmp" *.txt 2>nul
goto END

:Ping
set stat=Faild
if "%1"=="Date" echo Date		%dt%	%~2>>"%~n0.tmp"&exit /b
if "%1"=="Time" echo Time		%tm%	%~2>>"%~n0.tmp"&exit /b
ping -n 1 %1 >nul 2>nul
if %ErrorLevel%==0 set stat=Ok
echo %1	%stat%	%~2>>"%~n0.tmp"
exit /b

:END
исходный файл должен выглядить так:
Код: Выделить весь код
Date		
Time		
192.168.0.1	
192.168.0.151	
192.168.0.8	
192.168.0.101	
192.168.0.111	
192.168.0.6
На выходе будет так:
Код: Выделить весь код
Date		101012	101012	101012	
Time		162205	162143	162131	
192.168.0.1	Ok	Ok	Ok	
192.168.0.151	Ok	Ok	Ok	
192.168.0.8	Ok	Ok	Ok	
192.168.0.101	Ok	Ok	Ok	
192.168.0.111	Ok	Ok	Ok	
192.168.0.6	Ok	Faild	Faild
* строки Date и Time можно опустить в любой последовательности

-------
Как сказало Дерево Дровосеку: "я - пень".

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:26, 12-10-2010 | #2



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

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


Новый участник


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

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


Вот как я сделал.
Создал файл с расширением 123.bat и записал там код, что Вы дали.
там же разместил файл 123.txt
содержимое:
Date
Time
192.168.0.1
192.168.0.151
192.168.0.8
192.168.0.101
192.168.0.111
192.168.0.6

и потом запустил файл 123.bat

хотелось бы пояснений по коду

но ничего не произошло.
Подскажите пожалуйста как правильно сделать.
Спасибо

Отправлено: 16:39, 13-10-2010 | #3


Старожил


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

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


Цитата a139st:
но ничего не произошло. »
Давайте проверим. Сам текстовый файл со списком не обязан находится в том же каталоге, что и "батник" (для пользования нескольких списков, разложенных по каталогам)

1. Текстовый файл в обычной кодировке ASCII (или 1251 или 866 - неважно, главное не UTF16..64)
2. Он не заблокирован текстовым редактором, батник запускается действительно в каталоге, где расположен 123, допустим каким-либо "коммандером". (Вы правильно сделали, назвав текстовый файл также, как и "батник", я забыл уточнить этот немаловажный момент, извиняюсь)
3. Если все условия соблюдены, то хорошо-бы сделать отладочный лог - укоротить список адресов до 2-3, убрать первую строку "@Echo off", убрать перенаправления ">nul" и особенно "2>nul"
4. Запустить "батник" в консоли (cmd.exe) и все, что там окажется скопировать в текстовичок, который выложить сюда.

Пояснения по коду по блокам:
1. Разрешить новые возможности команд
2. Взять текущие время и дату в формате YYMMDD и HHMMSS - без разделителей, чтобы поместились в столбец из 8 символов (для вывода в CSV лучше сохранить и дату и время в другом формате - эксел при инпорте принудительно делает распознование типа данных, чем иногда портит все удовольствие от использования)
3. Начинаем в цикле построчный разбор уже имеющегося файла: выделяется первый столбец с адресом в %%A и все остальные столбцы со статистикой в %%B, обработка вынесена в отдельную процедуру ":Ping" для удобства и возможности в дальнейшем использовать какие-нить допобработки не прибегая к включению режима "отложенного раскрытия переменных" (setLocal EnableDelayedExpansion).
4. Процедура ":Ping" проверяет "адрес" (первый параметр) на совпадение со словами Date или Time (могут встретиться в любой строке файла) и выводит соответсвующую переменную до остальных столбцов (т.е. какбы вставляя новый столбец). В противном случае "адрес" является действительно адресом (или именем компа/сайта) - делаем тестовый "пинг", если ошибки нет (переменная %ErrorLevel%) - меняем значение "статуса" с "Faild" на "Ok". Выводим результат в том же порядке - "Адрес" текущий результат проверки, все предыдущие результаты проверки (вставляется столбец).
Весь вывод процедуры осуществляется во временный файл в текущем каталоге, с тем же именем, что и "батник", но расширением "tmp" ("%~n0.tmp")
5. По завершению цикла (который мог и не выполниться ниразу), удаляется файл "*.old" (предыдущий результат), *.txt (наш текстовик) переименовывается в "*.old", а временный файл переименовывается на место "текстовика".

-------
Как сказало Дерево Дровосеку: "я - пень".


Отправлено: 17:47, 13-10-2010 | #4


Ветеран


Contributor


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

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


Вложения
Тип файла: xls Пинг_списка_IP.xls
(18.0 Kb, 113 просмотров)

Вот макрос Excel
Код: Выделить весь код
Sub pinglan()
    Begin = "N3"    ' Клетка, с которой начинается просмотр адресов в таблице
    Set WS = CreateObject("WScript.Shell")
    
    ip = Range(Begin)
    i = 0
    Do While Len(Trim(ip)) <> 0
        Ret = WS.Run("cmd /C Ping " + ip, 1, True)
        
        Msg = CStr(Date) + " " + CStr(Time)
        If Ret = 0 Then Msg = Msg + " OK" Else Msg = Msg + " Err"
        Range(Begin).Offset(i, 1) = Msg
'        MsgBox Msg
        
        i = i + 1
        ip = Range(Begin).Offset(i, 0)
    Loop
End Sub
Готовая таблица в прикреплённом файле

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:19, 13-10-2010 | #5


Новый участник


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

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


NiOl
Спасибо большое! Всё работает.
Сказать честно не понял в чём была причина, думаю в кодировке а может нет. Незнаю.
Создал заново 123.txt. Результат такой как Вы описываете.
Просьба осталась одна: нужно чтобы количество пингов можно было регулировать, дело в том что на первые 3-5 пингов оборудование может не ответить. Скажем чтобы послать 8 пингов и естли один из пингов ответил то результат ОК
Спасибо за помошь!

megaloman
Интесено.
Поясните пожалуйста как мне запустить проверку, я не совсем понял.
вот у меня есть файл 123.xls Каковы мои действия?

Отправлено: 09:27, 14-10-2010 | #6


Ветеран


Contributor


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

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


Я прикрепил к ответу готовую таблицу (см мой предыдущий пост, как видно по статистике, вы в мою таблицу не заглядывали). Возьмите её. Там пример использования
Цитата:
-В 14 столбце занесены IP адреса. Нужно взять IP, пингануть и результат пингов записать в следующий столбец т.е сформировать 15 столбец с результатами.
Я не знаю, что в Вашем файле 123, но, в любом случае, там надо создать макрос (код я привёл) и выполнить его. Если у Вас трудности с созданием макроса в таблице - пишите.
Цитата:
нужно чтобы количество пингов можно было регулировать
см. подсказку ping /?. Например:
Ping -n 8 111.111.111.111
В моём коде это будет выглядеть
Ret = WS.Run("cmd /C Ping -n 8 " + ip, 1, True)
При желании число пингов можно прочесть из клетки в той же таблице - пишите, сделаю.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 09:58, 14-10-2010 | #7


Новый участник


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

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


файл я смотрел , подносишь курсор на кнопку "запустить сканирование указанных IP" он у меня преврашается в форму стрелки на все 4 стороны, т.е. для перемешения.


Каждый раз файл для тестирования будет разный, т.е. допустим строк у меня в файле 1000, из них сегодня в работе (которые я уверенно знаю работают) 895, на следующий день что то из этого списка может выпасть или что то добавиться. Получается каждый раз для тестирования я беру новый файл.
Допустим есть такой файл: все столбцы до включительно 14 заполнены. Содержимое остальных строк не должно измениться. результат получить в 15 столбце.
Как создать макрос в таблице и запустить его ? Подскажите пожалуйста.

Отправлено: 10:45, 14-10-2010 | #8


Старожил


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

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


a139st, megaloman правильно отметил, в команде ping за количество пингов отвечает параметр -n - после него вместо 1 ставите 8, но я пока не нашел на чем мне проверить, каков будет код возврата в таком случае - успешно, если пинг хоть раз пробился, или неудачный в случае потери хоть одного пакета... найду кого на работе можно без последствий "отключить" и проверю...

-------
Как сказало Дерево Дровосеку: "я - пень".


Отправлено: 12:19, 14-10-2010 | #9


Новый участник


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

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


Верно, с количеством пингов разобрался

Отправлено: 12:56, 14-10-2010 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Route/Bridge - Схема сетки dmz Сетевые технологии 4 06-12-2010 20:28
Доступ к шаре из сетки Negativ Microsoft Windows NT/2000/2003 2 17-08-2010 17:45
Прочее - Схема небольшой сетки migel2007 Сетевые технологии 10 28-06-2008 01:42
создание сетки abramov4 Сетевые технологии 15 06-03-2006 13:31
Проблема со скоростью в сетки SanCho Сетевые технологии 7 14-11-2003 01:21




 
Переход