К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Получаем информацию о принтерах в сети SMNP (подключенные непосредственно)

Гость
0 - 04.08.2011 - 10:57
Где то так, только штатными средствами виндуза
нужные вам команды ищите в rfc 1759

//*******************************************
Процедура Сформировать()
Протокол = СоздатьОбъект("OlePrn.OleSnmp");
Сообщество = "public";
Попытки = 1;
Ожидание = 100;
Команда="25.3.2.1.3.1";
ШелСкрипт = СоздатьОбъект("WScript.Shell");
Ремота = СоздатьОбъект("rcbdyctl.setting");
Стр = СтрЗаменить(Ремота.GetIpAddress, ".", "" "");
Адреса = "";
Для Сч = 1 По 3 Цикл
Адреса = Адреса + СтрПолучитьСтроку(Стр, Сч) + ".";
КонецЦикла;
Для Сч = 1 По 255 Цикл
Адрес = Адреса + Сч;
Если ШелСкрипт.Run("ping -n 1 -w 10 " + Адрес, 0, -1) = 0 Тогда
Состояние("Опрос " + Адрес);
Попытка
Протокол.Open(Адрес, Сообщество, Попытки, Ожидание);
Сообщить(Адрес + " -> " + Протокол.Get(Команда));
Протокол.Close();
Исключение
КонецПопытки;
КонецЕсли;
КонецЦикла;
КонецПроцедуры



Гость
1 - 04.08.2011 - 11:15
Небрежничаешь?
Стр = СтрЗаменить(Ремота.GetIpAddress, ".", "" ""); ??
Адреса = Адреса + СтрПолучитьСтроку(Стр, Сч) + "."; ??
Но спасибо :)
Гость
2 - 04.08.2011 - 11:49
та ладно, это же документировано
Гость
3 - 04.08.2011 - 12:32
2-VZ > Хе, забавно... Но способ разделения методом СтрЗаменить(Параметр, ".", "" "") ни разу не использовал...
Признаю, вспылил, был неправ.
Однако... Точно уверен, что семерошнаяПопытка отловит прерывание по Протокол.Open(Адрес, Сообщество, Попытки, Ожидание)? Может, лучше в Run забить On Error Resume Next (заодно и цикл)?
Гость
4 - 04.08.2011 - 13:08
проверено
Гость
5 - 04.08.2011 - 16:30
А нафига ?
А драйвера потом как ?
Гость
6 - 04.08.2011 - 17:20
(6) какие такие драйвера ?
более информативно (или нужны еще статусы, порты и т.п.) ? -

//*******************************************
Процедура Сформировать()
Протокол = СоздатьОбъект("OlePrn.OleSnmp");
Сообщество = "public";
Попытки = 1;
Ожидание = 200;
Команды = СоздатьОбъект("СписокЗначений");
Команды.ДобавитьЗначение("25.3.2.1.3.1", "Имя");
Команды.ДобавитьЗначение("43.10.2.1.4.1.1", "Количество");
ШелСкрипт = СоздатьОбъект("WScript.Shell");
Ремота = СоздатьОбъект("rcbdyctl.setting");
Адреса = СтрЗаменить(Ремота.GetIpAddress, ";", "" "");
Для х = 1 По СтрКоличествоСтрок(Адреса) Цикл
Стр = СтрЗаменить(СтрПолучитьСтроку(Адреса, х), ".", "" "");
Сеть = "";
Для Сч = 1 По 3 Цикл
Сеть = Сеть + СтрПолучитьСтроку(Стр, Сч) + ".";
КонецЦикла;
Для Сч = 1 По 254 Цикл
Адрес = Сеть + Сч;
Состояние("Пинг: " + Адрес);
Если (ШелСкрипт.Run("ping -n 1 -w 10 " + Адрес, 0, -1) = 0) и (СтрПолучитьСтроку(Адреса, х) <> Адрес) Тогда
Состояние("Опрос: " + Адрес);
Попытка
Протокол.Open(Адрес, Сообщество, Попытки, Ожидание);
Стр = "Адрес: " + Адрес + "; ";
Для к = 1 По Команды.РазмерСписка() Цикл
Имя = "";
Команда = Команды.ПолучитьЗначение(к, Имя);
Стр = Стр + Имя + ": " + Протокол.Get(Команда) + "; ";
КонецЦикла;
Сообщить(Стр);
Протокол.Close();
Исключение
Ошибка = ОписаниеОшибки();
Если Найти(Ошибка, "Unknown Error") = 0 Тогда
Сообщить("Адрес: " + Адрес + " на SNMP овечает, но " + Сред(Ошибка, Найти(Ошибка, ":") + 1), "!!!");
КонецЕсли;
КонецПопытки;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
7 - 04.08.2011 - 22:40
спасибо...
скоро пора выпускать "библию" типа "Так говорил smaharbA"


К списку вопросов






Copyright ©, Все права защищены