|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Тестирование сетки. |
|
|
CMD/BAT - [решено] Тестирование сетки.
|
Новый участник Сообщения: 12 |
Профиль | Отправить PM | Цитировать Возникла необходимость тестировать сеть, чтобы определить работающее оборудование.
Имеется Excel-ский файл, состоит из нескольких столбцов. В 14 столбце занесены IP адреса. Нужно взять IP, пингануть и результат пингов записать в следующий столбец т.е сформировать 15 столбец с результатами, если хоть один пинг прошёл то результат ОК, если нет то строку оставить пустым. Затем переход на следующую строку. и так до конца столбца. Всего 1000 строк. Желательно, чтобы можно былобы регулировать количество пингов. Буду очень признателен за помощь. |
|
Отправлено: 15:32, 12-10-2010 |
Старожил Сообщения: 426
|
Профиль | Отправить 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 можно опустить в любой последовательности |
------- Отправлено: 16:26, 12-10-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 12
|
Профиль | Отправить 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
|
Профиль | Отправить 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 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Вот макрос 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
|
Профиль | Отправить PM | Цитировать NiOl
Спасибо большое! Всё работает. Сказать честно не понял в чём была причина, думаю в кодировке а может нет. Незнаю. Создал заново 123.txt. Результат такой как Вы описываете. Просьба осталась одна: нужно чтобы количество пингов можно было регулировать, дело в том что на первые 3-5 пингов оборудование может не ответить. Скажем чтобы послать 8 пингов и естли один из пингов ответил то результат ОК Спасибо за помошь! megaloman Интесено. Поясните пожалуйста как мне запустить проверку, я не совсем понял. вот у меня есть файл 123.xls Каковы мои действия? |
Отправлено: 09:27, 14-10-2010 | #6 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Я прикрепил к ответу готовую таблицу (см мой предыдущий пост, как видно по статистике, вы в мою таблицу не заглядывали). Возьмите её. Там пример использования
Цитата:
Цитата:
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
|
Профиль | Отправить PM | Цитировать файл я смотрел , подносишь курсор на кнопку "запустить сканирование указанных IP" он у меня преврашается в форму стрелки на все 4 стороны, т.е. для перемешения.
Каждый раз файл для тестирования будет разный, т.е. допустим строк у меня в файле 1000, из них сегодня в работе (которые я уверенно знаю работают) 895, на следующий день что то из этого списка может выпасть или что то добавиться. Получается каждый раз для тестирования я беру новый файл. Допустим есть такой файл: все столбцы до включительно 14 заполнены. Содержимое остальных строк не должно измениться. результат получить в 15 столбце. Как создать макрос в таблице и запустить его ? Подскажите пожалуйста. |
Отправлено: 10:45, 14-10-2010 | #8 |
Старожил Сообщения: 426
|
Профиль | Отправить PM | Цитировать a139st, megaloman правильно отметил, в команде ping за количество пингов отвечает параметр -n - после него вместо 1 ставите 8, но я пока не нашел на чем мне проверить, каков будет код возврата в таком случае - успешно, если пинг хоть раз пробился, или неудачный в случае потери хоть одного пакета... найду кого на работе можно без последствий "отключить" и проверю...
|
------- Отправлено: 12:19, 14-10-2010 | #9 |
Новый участник Сообщения: 12
|
Профиль | Отправить PM | Цитировать Верно, с количеством пингов разобрался
|
Отправлено: 12:56, 14-10-2010 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|