На просторах интернета наткнулся на вот такой код; Set o = CreateObject("OlePrn.OleSNMP") o.Open IPaddress, "public", 2, 1000 Name = o.get(".1.3.6.1.2.1.25.3.2.1.3.1") TotalPrintCounter = o.get(".1.3.6.1.4.1.1347.43.10.1.1.12.1.1") TotalScanCounter = o.get(".1.3.6.1.4.1.1347.46.10.1.1.5.3") o.Close Это фрагмент опроса МФУ по ip и oid для получения количества распечатанных и отсканированных страниц. Окно командной строки не выскакивает, работает в фоне и довольно быстро, буду пробовать его применить к решению задачи.
Доброго дня форумчане. Возникла проблема следующего плана. Есть множество устройств - несколько сотен (в частности это источники бесперебойного питания), которые необходимо удаленно мониторить по нескольким параметрам. Как вариант - осуществлять мониторинг через SNMP по OID и вывод полученных результатов в таблицу Excel. Под это дело был написан макрос, но при его запуске постоянно моргает окно выполнения командной строки при опросе устройств по OID. Прошу помощи эрудитов, что бы макрос выполнялся в фоновом режим, окно командной строки не мельтешило перед глазами. И ещё один вопрос: опрос проводится командой snmpget которая может производить опрос не только по одному OID (как сейчас выполнено), а по нескольким указанным в строке запросе (snmpget.exe -v1 -c Public ip oid1 oid2 ... oidN). Вопрос знатокам: как из этого множественного запроса выделить соответствующие запросы и внести их в соответствующие ячейки таблицы. Файл имеет два листа. На первом листе показания датчиков, на втором листе - коды OID по брендам ИБП. Количество устройств, датчиков опроса, и брендов устройств может быть произвольное. IP-адреса устройств в примере вымышленные. Код макроса:
Скрытый текст
Dim TimeToRun
Sub OIDs() Dim i1 As Long, j1 As Long, i2 As Long, oid, ip Dim Device As Integer, Brand As Integer, Datchik As Integer Set S = CreateObject("wscript.shell") SNMPget = "C:\usr\bin\snmpget.exe -v1 -c Public " Device = 2 Brand = 2 Datchik = 2 Do Until Sheets("Radio").Cells(Device, "A") = "" 'подсчет количества опрашиваемых устройств Device = Device + 1 Loop Do Until Sheets("OID").Cells(Brand, "A") = "" 'подсчет количества опрашиваемых брендов Brand = Brand + 1 Loop Do Until Sheets("OID").Cells(1, Datchik) = "" 'подсчет количества опрашиваемых датчиков Datchik = Datchik + 1 Loop For i1 = 2 To Device - 1 'цикл опроса устройств ip = Cells(i1, 2) 'присвоение ip-адреса For j1 = 2 To Brand - 1 'цикл опроса брендов a = Sheets("Radio").Cells(i1, 3) b = Sheets("OID").Cells(j1, 1) If a = b Then 'сравнение брендов листов For i2 = 1 To Datchik 'цикл опроса датчиков по oid oid = Sheets("OID").Cells(j1, i2 + 1) 'Set sType = S.Exec(SNMPget & ip & " " & oid) strN = S.Exec(SNMPget & ip & " " & oid).StdOut.ReadAll 'strN присваивается считанная строка intPosition = InStrRev(strN, ": ") + 1 'анализ и выделение значения датчика ID = Trim(Mid(strN, intPosition, Len(strN))) 'присвоение ID значения датчика If b = "P-Com" Then 'условие проверки на соответствие бренду "P-Com" If (oid = ".1.3.6.1.4.1.935.1.1.1.3.2.1.0" Or oid = ".1.3.6.1.4.1.935.1.1.1.2.2.3.0" Or oid = ".1.3.6.1.4.1.935.1.1.1.4.2.1.0") Then ID = ID / 10 'приведение датчиков напряжения и температуры к нормальному виду Else End If Else End If Sheets("Radio").Cells(i1, i2 + 3) = ID 'вывод значения ID в соответствующую ячейку. Next Else End If Next Sheets("Radio").Cells(i1, i2 + 1) = Now 'вывод времени получения данных по устройству Next Sheets("Radio").Cells(i1, i2 + 1) = Now - Sheets("Radio").Cells(2, i2 + 1) 'длительность опроса устройств Call NextRun 'запуск макроса NextRun End Sub
Sub NextRun() 'макрос следующего времени опроса TimeToRun = Now + TimeValue("00:30:00") Application.OnTime TimeToRun, "OIDs" End Sub
Sub Start() 'макрос запуска Call NextRun End Sub
Sub Finish() 'макрос останова Application.OnTime TimeToRun, "OIDs", , False End Sub