在Windows打印服务器上通过SNMP \ Script获取打印机的IP

我正在设置一个通过SNMP监视打印机状态的icinga服务器(墨粉量,错误等等)。 所有打印机都可以通过共享的Windows打印服务器访问(打印机通过\ SERVER \ Printer_Share添加到客户端机器)。 虽然我能够通过SNMP直接通过IP查询打印机,但不知道他们的名字。 是否可以从Linux中查询Windows打印服务器以产生类似于以下内容的输出:

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

有了这个信息,我可以写一个脚本来创buildicingaconfiguration文件。 有数百台打印机,所以我不这样做手动。 我不是要求任何人为我写剧本,而是指向正确的方向。

您的select:

1.评估registry数据

  • 查询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-PrinterGet-PrinterPort cmdlet通过一个定义良好的接口来检索相应的数据(您需要使用Windows 8.1或Server 2012主机运行CMDlet,但打印服务器“重新运行他们反对可能是一个旧版本)

3.使用WMI

  • 类似于1.和2.,但使用WMI Win32_Printer类来检索打印机列表,并使用Win32_TCPIPPrinterPort类来检索具有WMI查询function的语言(例如VBScript )中的HostAddress值,

请注意,如果您的打印机使用特定供应商而不是Standard TCP/IP Port ,则没有统一的方法来执行此操作。 您将需要去弄清楚这一切,尽pipe这些信息可能会隐藏在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\<yourporttype>registry子项中。

请注意,虽然理论上可以使用RPC远程访问Linux站点,但是使用NRPE传输数据可能会更好( 使用外部脚本查看NSClient ++ )