从 Windows 打印服务器轮询打印机信息


Polling printer info from a Windows print server

我正在尝试开发一种从Windows打印服务器中提取打印机列表(至少名称和IP)的方法。我计划在外部PHP驱动的状态网站中使用此信息,该网站在Linux网络服务器上运行,该网站通过SNMP单独与打印机通信。SNMP 通信已正常工作。我只需要一种方法来动态生成它所通信的打印机列表,而不是对所有 IP/DNS 主机名进行硬编码。

这里的想法是,我完全不接触或更改打印服务器、打印机或底层网络服务器。我唯一控制的东西是一个共享的、非行政的 CPanel 帐户。

到目前为止,我的研究使我找到了三个潜在的线索。我对他们中的任何一个几乎没有经验。

1) PHP printer_list 命令,它是 PECL 扩展的一部分。目前,我们的网络服务器没有安装此扩展程序,除非我知道它适用于我的目的,否则我宁愿不提出该请求。

2) lpstat Linux 命令,CUPS 的一部分。我尝试过在每个手册页使用它,它似乎只是坐在那里什么都不做。我不知道这是否是因为它期待 CUPS 响应,我认为它不会从 Windows 服务器获得,或者这可能是防火墙问题。

3) 某种类型的 SMB 或 WMI 查询。我什至不知道如何从这些开始。

我想就从哪里开始征求建议。这是一个非常令人不安的研究项目,因为90%的搜索结果都是关于想要打印的人。另外8%是关于人们在本地系统中轮询打印机信息。其余的是黑魔法和专有企业解决方案。

任何见解都非常感谢。== 马特

我正在使用以下方法有效地使用 WMI 通过网络获取打印机信息:

Select * FROM Win32_Printer

首先:

1 - 从运行窗口运行wbemtest

2 - 连接到已知已配置打印机的任何计算机。

3 - 有查询选项,复制Select * FROM Win32_Printer

4 - 步骤4将返回表格,单击Show MOF,它将为您提供打印机信息。维奥拉,你完成了。

5 - 我用过C# ManagementObjectSearcherManagementObjectCollection,它非常简单易用。

使用 WMI 有一些优点和缺点。在线阅读。