Собственно любое необходимое нам значение для систем мониторинга можно получить в виде oid формата .1.3.6.1.4.1.15.Х и снимать через удобный SNMP
В моем случае возникла задача мониторить старенький ИБП Ippon, snmp – карты в нем, конечно же, нет, и покупать ее никто не собирался, но есть USB подключенный к компу, им и воспользуемся.
Для начала нам понадобится включить службу SNMP на имеющейся Windows(x64), как это сделать можно найти на просторах интернета
Далее копируем библиотеку snmptools.dll в папку C:\Windows\
Затем для наших нужд создадим папку Scripts на диске С для скриптов (путь будет C:\Scripts\)
В этой папке создадим файл counters.ini и для теста вставим содержимое
[1.3.6.1.4.1.15.1] type=string counter=SNMP TEST
О созданных файлах необходимо внести изменение в реестр, для этого можно воспользоваться готовым файлом или создать свой с расширением reg
Видим наше значение, если что-то пошло не так, то не забываем про лог файл в корне диска C
Далее необходимо отредактировать ранее созданный counter.ini желаемыми значениями сопоставив с oid
Примерное содержание может быть следующим:
;Для статичной записи
[1.3.6.1.4.1.15.1]
type=string
counter=SNMP TEST
;Для запуска скриптов VBS
[1.3.6.1.4.1.15.2]
type=exec
counter=cscript /nologo c:\1c_sessions.vbs
;Для однострочных команд
[1.3.6.1.4.1.15.3]
type=exec
counter=cmd /c hostname
;Для запуска python скриптов
[1.3.6.1.4.1.15.4]
type=exec
counter=python3 c:\Scripts\test.py
;Для запуска Powershell скриптов
[1.3.6.1.4.1.15.5]
type=exec
counter=powershell c:\Scripts\test.ps1
В моем случае для связи через USB c ИБП Ippon была установлена штатная программа WinPower, которая умеет запускать собственный веб-сервер доступный по адресу https://IP:8888, и к тому же умеет отдавать данные в формате JSON по адресу https://IP:8888/0/json
Этого оказалось достаточно, пишем простой Powershell скрипт и парсим нужное значение
Увы, запрос json у ибп доступен только через ssl зашифрованное соединение, в нашем случае с невалидным сертификатом. Powershell явно не умеет игнорировать сертификат, для этого и пользуемся [System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true } перед запросом. Список всех доступных значений можем получить поменяв $data.batCapacity.Trim(‘%’) на $data