通过 SNMP_Script 获取 Windows 打印服务器上打印机的 IP

通过 SNMP_Script 获取 Windows 打印服务器上打印机的 IP

我正在设置一个 icinga 服务器,用于通过 SNMP 监控打印机状态(碳粉量、错误等)。所有打印机都可以通过共享的 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

有了这些信息,我就可以编写一个脚本来创建 icinga 配置文件。有数百台打印机,所以我不会手动执行此操作。我不是要求任何人为我编写脚本,而是为我指明正确的方向。

答案1

您的选择:

1. 评估注册数据

  • 查询的子键以HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers获取打印机列表
  • 匹配portHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Ports
  • 评估匹配键中的 HostName 和 IPAddress 值

2. 使用 Powershell

  • 与 1. 类似,但使用Get-PrinterGet-PrinterPortcmdlet 通过明确定义的接口检索相应的数据(您需要使用 Windows 8.1 或 Server 2012 主机来运行 CMDlet,但运行它们的打印服务器可能是旧版本)

3. 使用 WMI

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

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

相关内容