![]() |
Тестирование сетки.
Возникла необходимость тестировать сеть, чтобы определить работающее оборудование.
Имеется Excel-ский файл, состоит из нескольких столбцов. В 14 столбце занесены IP адреса. Нужно взять IP, пингануть и результат пингов записать в следующий столбец т.е сформировать 15 столбец с результатами, если хоть один пинг прошёл то результат ОК, если нет то строку оставить пустым. Затем переход на следующую строку. и так до конца столбца. Всего 1000 строк. Желательно, чтобы можно былобы регулировать количество пингов. Буду очень признателен за помощь. |
1. Для работы с таблицами Вам скорее всего придется использовать VBS, особливо учитывая, что он уже встроен в Exel... ;)
2. Если заменить таблицу на текстовый файл, то можно сделать так (на базе старого отчета по пингам): Код:
@Echo off Код:
Date Код:
Date 101012 101012 101012 |
Вот как я сделал.
Создал файл с расширением 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 хотелось бы пояснений по коду но ничего не произошло. Подскажите пожалуйста как правильно сделать. Спасибо |
Цитата:
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", а временный файл переименовывается на место "текстовика". |
Вложений: 1
Вот макрос Excel
Код:
Sub pinglan() |
NiOl
Спасибо большое! Всё работает. Сказать честно не понял в чём была причина, думаю в кодировке а может нет. Незнаю. Создал заново 123.txt. Результат такой как Вы описываете. Просьба осталась одна: нужно чтобы количество пингов можно было регулировать, дело в том что на первые 3-5 пингов оборудование может не ответить. Скажем чтобы послать 8 пингов и естли один из пингов ответил то результат ОК Спасибо за помошь! megaloman Интесено. Поясните пожалуйста как мне запустить проверку, я не совсем понял. вот у меня есть файл 123.xls Каковы мои действия? |
Я прикрепил к ответу готовую таблицу (см мой предыдущий пост, как видно по статистике, вы в мою таблицу не заглядывали). Возьмите её. Там пример использования
Цитата:
Цитата:
Ping -n 8 111.111.111.111 В моём коде это будет выглядеть Ret = WS.Run("cmd /C Ping -n 8 " + ip, 1, True) При желании число пингов можно прочесть из клетки в той же таблице - пишите, сделаю. |
файл я смотрел , подносишь курсор на кнопку "запустить сканирование указанных IP" он у меня преврашается в форму стрелки на все 4 стороны, т.е. для перемешения.
Каждый раз файл для тестирования будет разный, т.е. допустим строк у меня в файле 1000, из них сегодня в работе (которые я уверенно знаю работают) 895, на следующий день что то из этого списка может выпасть или что то добавиться. Получается каждый раз для тестирования я беру новый файл. Допустим есть такой файл: все столбцы до включительно 14 заполнены. Содержимое остальных строк не должно измениться. результат получить в 15 столбце. Как создать макрос в таблице и запустить его ? Подскажите пожалуйста. |
a139st, megaloman правильно отметил, в команде ping за количество пингов отвечает параметр -n - после него вместо 1 ставите 8, но я пока не нашел на чем мне проверить, каков будет код возврата в таком случае - успешно, если пинг хоть раз пробился, или неудачный в случае потери хоть одного пакета... найду кого на работе можно без последствий "отключить" и проверю...
|
Верно, с количеством пингов разобрался
|
megaloman Разобрался, для было уровне безопасности, поставил низкую заработала.
Но осталось ещё одна проблема. При любом пинге, есть оборудование нет его - результат ОК. Специально ввёл несуществующие IP, результат проверки ОК. Вижу запускается командная строка в ней пингование и вижу что нет ответа, но в строчке результат ОК Что же это может быть? |
Понятненько - если пингов несколько - результат положительный, если узел был досупен хоть раз.
В макросе думаю проблема в том, что возвращается код завершения CMD.EXE, а не самого PING. Попробуйте, выполнит ли макрос саму команду Ping без CMD |
Нет не выполняет, Даёт ошибку.
Я сделал так: в макросе удалил команду cmd, и запустил макрос. Правильно? А как можно пустить пинг без cmd? в фоновом режиме? |
Ret = WS.Run("Ping " + ip, 1, True)
Но у меня ведь работает! Правильно. И с CMD и без него |
Мои действия были такие:
Сохранил файл который вы выслали. Из трёх IP два заменил на мои рабочие и удалил содержимое 15 столбца. Запустил макрос, открылcя cmd вижу как идут пинги, первые два прошли успешно, а третий не прошёл. А после завершения макроса результат все три IP ОК. Может есть какие мысли? что не так делаю? Если во время пингования я закрою окошко cmd командной строки (т.е. просто нажимаю крестик), то результат везде Err. |
Похоже, во всём виноват Windows. Проверил на Win XP, 2003 -работает. Win 2000 (у меня сервер) - увы. Там пинг по любому выдаёт ErrorLevel=0. Ни мой макрос, никакой батник с ping-ом и дальнейшей проверкой на ErrorLevel там работать не будут.
Цитата:
Попробуйте запустить вот такой батник для имеющегося адреса и отсутствующего. Подозреваю, ErrorLevel в обоих случаях = 0 Код:
@Echo Off |
Цитата:
|
megaloman Спасибо Вы оказались правы. Действительно на компьютере установлен Win 2000Server. Я тут и пробовал, он у меня имеет выход в инет.
Код я запустил вот результат: Код:
Set ip=192.168.0.5 Там всё действительно работает. Если не тяжело можно будет дополнить макрос следующим образом: После проверки IP, если результат ОК, то проверить IP на 1 больше, пример IP 192.168.2.2 результат ОК проверить IP 192.168.2.3 и результат проверки записать в 16 столбец. А потом переход на следующую строку. Если после проверки IP результат Err, то сразу переход на следующую строку. Дело в том, что за одним оборудованием установлено ещё одно, IP которого отличается от главного на 1. Если главный IP не виден то второй проверять нет смысла. Заранее благодарен за помощь! |
Код:
Sub pinglan() |
Всё работает, Спасибо!
Только число подузлов у меня только один, и нет смысла пинговать второй подузел, его нет. Для этого как нужно изменит код? Сделать N_Uzl = 1 , этого хватает или ещё что нужно поменять? Измените пожалуйста код. ещё одна просьба что нужно сделать чтобы тестирование проходило не в фоновом режиме, а наглядно видеть, т.е. окошко cmd? какая команда в коде? (Чтобы мог самостоятельно менять) |
Код:
Sub pingnet() |
Не смогли бы вы заново выложить код с данными изменениями,
У меня что то не получается. |
Всё понятно и всё работает.
Большое спасибо за помощь!!! Успехов Вам! |
У этих скриптов есть интересная особенность, при пинге узла от которого приходит не "превышен интервал ожидания для запроса", а "ответ от *.*.*.* заданный узел не доступен", в результат записывает ОК.
|
Добрый день! Подскажите пожалуйста, а каким образом можно данный bat-файл приспособить к следующей задаче:
Есть контрольный файл в папке C:\111 с названием: "HTIN.txt" В нем есть контрольные строки вида: Код:
C:\222\000047675410000000011122015.XML: Код:
C:\222\000047675410000000011122015.XML: 456 Код:
C:\222\000047675410000000011122015.XML: 987 И если находил в них еквивалентную контрольному файлу строчку, то записывал результат следующим образом: Содержимое "HTIN.txt" после обработки: Код:
R22GA R23GA Я понимаю следующее: Код:
@Echo off |
Цитата:
Не-а, нужен другой алгоритм: Код:
@echo off |
Georgio, огромное вам спасибо за помощь! Извините что поблагодарил только сейчас. Как говориться лучше поздно чем никогда. А не подскажете как решить такой вопрос:
Код:
@Echo off |
Время: 20:19. |
Время: 20:19.
© OSzone.net 2001-