Назад | Перейти на главную страницу

Получить IP-адреса принтеров на сервере печати Windows через SNMP \ Script

Я настраиваю сервер icinga для мониторинга состояния принтера через SNMP (уровень тонера, ошибки и тому подобное). Все принтеры доступны через общий сервер печати Windows (принтер добавляется к клиентским машинам через \ SERVER \ Printer_Share). Хотя я могу запрашивать принтеры по IP напрямую через SNMP, это ничего не говорит мне об их имени. Можно ли запросить сервер печати Windows из Linux, чтобы получить результат, подобный следующему:

Shared Printer 1 -> IP_1
Shared Printer 2 -> IP_2
Shared Printer 3 -> IP_3
Shared Printer 4 -> IP_4

Используя эту информацию, я могу написать сценарий для создания файлов конфигурации icinga. Есть сотни принтеров, поэтому я не делаю это вручную. Я не прошу никого писать для меня сценарий, а скорее укажу мне правильное направление.

Ваши варианты:

1. оценить данные реестра

  • запрос для подключей HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers получить список принтеров
  • соответствовать port ценность против HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports
  • оценить значения HostName и IPAddress в соответствующем ключе

2. используйте Powershell

  • аналогично 1., но используйте Get-Printer и Get-PrinterPort командлеты для получения соответствующих данных через четко определенный интерфейс (вам потребуется использовать хосты Windows 8.1 или Server 2012 для запуска CMDlets, но сервер печати, на котором вы их запускаете, может быть более старой версией)

3. использовать WMI

  • аналогично 1. и 2., но использовать WMI Win32_Printer класс, чтобы получить список принтеров и Win32_TCPIPPrinterPort класс, чтобы вернуть HostAddress значение на выбранном вами языке с поддержкой WMI-запросов (например, VBScript)

Обратите внимание, что не существует единого способа сделать это, если ваши принтеры используют что-то зависящее от производителя, а не Standard TCP/IP Port. Вам нужно будет пойти и во всем разобраться, хотя есть вероятность, что эта информация будет похоронена где-нибудь в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\<yourporttype> подраздел реестра.

Обратите внимание, что, хотя теоретически вы можете удаленно удалять данные со станции Linux с помощью RPC, вероятно, было бы лучше, если бы NRPE передавал данные (см. NSClient ++ с использованием внешних скриптов)