Показать полную графическую версию : [решено] Сбор статистики
KAPMAHOK
24-12-2014, 12:15
Добрый день!
Второй день бьюсь над простеньким скриптом и никак не могу побороть, решил обратить за помощью к умным людям.
И так суть такова:
Есть сетевой запрос по Snmp на определённый список адресов сетевых принтеров, который показывает счётчик страниц. Нужно в текстовый файл записать значения вида ip address=счётчик страниц!
запрос вида
Snmpget.exe -r:192.168.1.1 -o:.1.3.6.1.2.1.43.10.2.1.4.1.1
Выдаёт
SnmpGet v1.01 - Copyright (C) 2009 SnmpSoft Company
[ More useful network tools on http://www.snmpsoft.com ]
OID=.1.3.6.1.2.1.43.10.2.1.4.1.1
Type=Counter32
Value=237326
Все мои попытки привели к такому варианту, но записывает одни и те же значения в файл(((
del Counter.txt
for /F "EOL=; TOKENS=*" %%i in (ip_printers.txt) do (D:\SNMPWalk\Snmpget.exe -r:%%i -o:.1.3.6.1.2.1.43.10.2.1.4.1.1 > r.txt
for /f "usebackq tokens=*" %%a in ("r.txt") do (set %%a)
echo %%i=%Value% >> Counter.txt
)
Сильно не пинайте, я с этим делом впервые сталкиваюсь(
Foreigner
24-12-2014, 12:58
Как выглядит ip_printers.txt ?
KAPMAHOK
24-12-2014, 13:11
Выглядит так:
192.168.1.1
192.168.1.2
192.168.1.3
Foreigner
24-12-2014, 13:26
KAPMAHOK, Попробуйте так, не проверял:
@echo off
setlocal
for /f %%i in (ip_printers.txt) do call:1 %%i
goto:eof
:1
for /f "skip=3" %%i in (' Snmpget.exe -r:%1 -o:.1.3.6.1.2.1.43.10.2.1.4.1.1 ') do 1>nul set "%%i"
1>>counter.txt echo %1=%value%
Пути к файлам откорректируйте сами.
KAPMAHOK
24-12-2014, 13:40
Вот, спасибо))) То что надо!!!
Ой а как в конце добавить отсылку на почту, но чтобы она не повторялась, после каждой записи в файл, а только после завершения цикла отправила файл с помощью blat.exe?
Foreigner
24-12-2014, 15:59
как в конце добавить отсылку на почту »
Добавить команду blat:
....
for /f %%i in (ip_printers.txt) do call:1 %%i
blat бла-бла-бла -attach "C:\Folder\Folder\counter.txt"
goto:eof
.....
Приветствую.
Совсем недавно решал точно такую же задачу с опросом из списка через snmpget.exe, записью результата в csv таблицу и отпправкой с использованием blat.
У меня правда скрипт гораздо топорней. Просто в лоб по каждому ip.
Вот хочу оптимизировать. Очень понравилось лаконичное решение от Foreigner,
Но когда пробую у себя, пишет такую ошибку
set "%Failed" 1>nul
Environment variable "%Failed not defined
причем "%Failed это начало строки ответа snmpget.exe в случае если нет соединения. Такое бывает при опросе это норм.
В итоговом файле (counter.txt) просто 192.168.1.1=
Своими копеечными познаниями bat, понимаю что переменная не определена, но вот как это исправить?
Кстати если указать параметр -q то snmpget выдаст результат в одну строчку и тогда не нужен "skip=3"
Foreigner
25-12-2014, 11:09
STLK, set "%Failed" 1>nul »
Ну так здесь должна быть переменная указанная на выходе Snmpget.exe. Т.е. получаются три переменные %OID%, %Type% и %Value%, а Failed там взяться не откуда:
for /f "skip=3" %%i in (' Snmpget.exe -r:192.168.1.1 -o:.1.3.6.1.2.1.43.10.2.1.4.1.1 ') do 1>nul set "%%i"
echo %OID%
echo %Type%
echo %Value%
1>nul здесь подавляет вывод всех переменных команды set
Кстати если указать параметр -q то snmpget выдаст результат в одну строчку и тогда не нужен "skip=3"
У меня нет этой утилиты, ориентировался на приведенный KAPMAHOK вывод ее на консоль.
Там же в выводе ссылка на сайт приведена: SnmpGet.zip (143KB) (http://www.snmpsoft.com/downloads/SnmpGet.zip).
Foreigner
25-12-2014, 14:25
Iska, Подозреваю, что она бесполезна без принтера
Foreigner,
Спасибо. Работает.
Подскажите еще как можно реализовать опрос не по одному а нескольким значениям OID ? И результат дописывать в ту же строку?
Т.е. в итоговом файле counter.txt в одну строку через точку с запятой должны быть указаны:
IP (переменная %1 в подпрограмме :1); значение %value% от выполнения команды Snmpget.exe -r:%1 -o:.1.3.6.1.2.1.43.10.2.1.4.1.1 ; и тоже значение %value% но с другим -o
Все что приходит в голову - это по очереди выполнять запросы с разными OID. как вписать результаты в одну строку?
Foreigner
25-12-2014, 15:58
STLK, Если верно понял:
@echo off
setlocal
for /f %%i in (ip_printers.txt) do call:1 %%i
goto:eof
:1
for %%i in (.1.3.6.1.2.1.43.10.2.1.4.1.1 .1.3.6.1.2.1.43.10.2.1.4.1.2) do (
for /f "skip=3" %%j in (' Snmpget.exe -r:%1 -o:%%i ') do 1>nul set "%%i_%%j"
)
1>>counter.txt echo %1;%.1.3.6.1.2.1.43.10.2.1.4.1.1_value%;%.1.3.6.1.2.1.43.10.2.1.4.1.2_value%
Iska, Подозреваю, что она бесполезна без принтера »
Верно подозреваете. Но для отладки подойдёт, как я подозреваю [теперь уже я ;)], любое устройство, например, приличный сервер, роутер, управляемый switch и т.п. С принтером я вчера вечером опробовать успел.
P.S. Я бы всё ж таки с «-q» попробовал, для простоты.
Тут возник один момент. Если IP доступен, то значение %value% прописывается в итоговый отчет без проблем.
Но, если связи нет, то вместо значения будет ошибка %Failed to get value of SNMP variable. Timeout.
В этом случае скрипт оставляет строку пустой. И если этот IP не первый в списке, запишет в итоговый отчет значение %value% от предидущего IP.
Foreigner
26-12-2014, 17:47
STLK, Пропинговать?
....
:1
1>nul ping -n 1 %1 || ( 1>>counter.txt echo IP: %1 not available at %date% %time:~0,-3% & goto:eof )
....
Foreigner, Супер!
Собрал в один скрипт. Все работает!
По каждому IP выводит в отчет два параметра через ; или Timeout если нет ответа
Вот только вариант с проверкой пингом боюсь в моей ситуации не подойдет.
канал связи настолько не стабилен, что за время пока выполняется команда, может отвалиться соединение.
Т.е. пинг отработал а snmpget уже нет =(
Заметил это прогнав скрипт на большом списке IPшников, через удаленное соединение.
Как сделать проверку- есть ли в %value% текст ошибки (%Failed to get value of SNMP variable. Timeout.) и повторно запускать цикл опроса. Так подряд 2-3 раза, и если все равно Timeout - писать в отчет что "не получилось" и тогда уже переходить к следующему IP ?
Вот только вариант с проверкой пингом боюсь в моей ситуации не подойдет.
канал связи настолько не стабилен, что за время пока выполняется команда, может отвалиться соединение.
Т.е. пинг отработал а snmpget уже нет =( »
Фильтруйте вывод по ключевым словам.
Так подряд 2-3 раза, »
Два или три ;)?
Foreigner
29-12-2014, 19:54
Iska, Согласен, плюс лучше проверять пинг через поиск "TTL"
ping 192.168.0.1 -n 3 | 1>nul findstr "TTL=" || echo ERROR!!!
плюс лучше проверять пинг через поиск "TTL" »
Я нет-нет, да забываю об этом :(.
Foreigner, Добрый день! Ваш скрипт служил мне верой и правдой долгое время, собирал счетчики, хост нэймы, но появилась необходимость собрать mac-адреса. При записи в скрипт OID mac-адреса принтера случается проблема.
Mac адрес выглядит так 18:a9:05:fd:53:56
скрипт записывает в файл:
Режим вывода команд на экран (ECHO) отключен.
а в окне пишет
переменная среды .1.3.6.1.4.1.11.2.4.3.1.23.0 _%Failed не определена
Текст скрипта привожу ниже
@echo off
setlocal
for /f %%i in (ip_printers.txt) do call:1 %%i
goto:eof
:1
1>nul ping -n 4 %1 || ( 1>>mac.txt echo ND )
:1
for %%i in (.1.3.6.1.4.1.11.2.4.3.1.23.0) do (
for /f "skip=3" %%j in (' Snmpget.exe -r:%1 -o:%%i ') do 1>nul set "%%i_%%j"
)
1>>mac.txt echo %.1.3.6.1.4.1.11.2.4.3.1.23.0_value%
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.