Имя: Пароль:
1C
1C 7.7
v7: Получаем информацию о принтерах в сети SMNP (подключенные непосредственно)
0 smaharbA
 
04.08.11
11:34
Где то так, только штатными средствами виндуза
нужные вам команды ищите в 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 smaharbA
 
04.08.11
14:10
ктонить проверит ?
2 andrewks
 
04.08.11
14:12
какие принтеры он должен показывать? которые по сетевому протоколу подключены?
3 andrewks
 
04.08.11
14:15
на вынь2к : Неудачная попытка создания объекта (rcbdyctl.setting)

на хрюше: полез в сеть провайдера опрашивать заместо локалки :)
4 ДенисЧ
 
04.08.11
14:17
2 нашла всего...
И ещё один на странном адресе 192,168,0,255 :-))
5 smaharbA
 
04.08.11
14:19
(3) с адресами сами разбирайтеся, можете ручками вбить
6 smaharbA
 
04.08.11
14:19
(4) зависит от "сообщества"
7 andrewks
 
04.08.11
14:20
(5) дык как ему интерфейс-то показать нужный? понятно, что можно айпишники конкретные подсунуть, но так не интересно
8 smaharbA
 
04.08.11
14:20
+(6) и таймаутов с попытками
9 smaharbA
 
04.08.11
14:25
(7) гетипадрес выдает список через точку с запятой адресов, если нужен интерфейс - то вми
10 smaharbA
 
04.08.11
15:17
соответственно замечаний (только не начинайте про маски, подсети и т.п. )))


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

ЗЫ не в обиду
12 smaharbA
 
04.08.11
15:28
именно ))
13 smaharbA
 
04.08.11
18:37
попытаемся изменить (11) )))
(статусы, порты и т.п. так же)

//*******************************************
Процедура Сформировать()
   Протокол = СоздатьОбъект("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), "!!!");
                   КонецЕсли;
               КонецПопытки;
           КонецЕсли;
       КонецЦикла;
   КонецЦикла;
КонецПроцедуры