Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Получаем информацию о принтерах в сети SMNP (подключенные непосредственно) (http://forums.kuban.ru/f1040/poluchaem_informaciyu_o_printerah_v_seti_smnp_podklyuchennye_neposredstvenno-1398119.html)

smaharbA 04.08.2011 10:57

Получаем информацию о принтерах в сети SMNP (подключенные непосредственно)
 
Где то так, только штатными средствами виндуза
нужные вам команды ищите в 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();
Исключение
КонецПопытки;
КонецЕсли;
КонецЦикла;
КонецПроцедуры

VZ 04.08.2011 11:15

Небрежничаешь?
[em]Стр = СтрЗаменить(Ремота.GetIpAddress, ".", [u]"" ""[/u]);[/em] ??
[em]Адреса = Адреса + [u]СтрПолучитьСтроку[/u](Стр, Сч) + ".";[/em] ??
Но спасибо :)

smaharbA 04.08.2011 11:49

та ладно, это же документировано

VZ 04.08.2011 12:32

2-VZ > Хе, забавно... Но способ разделения методом [em]СтрЗаменить(Параметр, ".", "" "")[/em] ни разу не использовал...
Признаю, вспылил, был неправ.
Однако... Точно уверен, что семерошная[em]Попытка[/em] отловит прерывание по [em]Протокол.Open(Адрес, Сообщество, Попытки, Ожидание)[/em]? Может, лучше в [em]Run[/em] забить [em]On Error Resume Next[/em] (заодно и цикл)?

smaharbA 04.08.2011 13:08

проверено

drums2004 04.08.2011 16:30

А нафига ?
А драйвера потом как ?

smaharbA 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), "!!!");
КонецЕсли;
КонецПопытки;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры

Чучундер 04.08.2011 22:40

спасибо...
скоро пора выпускать "библию" типа "Так говорил smaharbA"


Текущее время: 08:26. Часовой пояс GMT +3.