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

Posted

技术标签:

【中文标题】从 Windows 打印服务器轮询打印机信息【英文标题】:Polling printer info from a Windows print server 【发布时间】:2016-04-23 00:32:59 【问题描述】:

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

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

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

1) PHP 打印机列表命令,它是 PECL 扩展的一部分。目前我们的网络服务器没有安装这个扩展,除非我知道它可以满足我的目的,否则我不希望提出这个请求。

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

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

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

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

【问题讨论】:

【参考方案1】:

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

Select * FROM Win32_Printer

开始:

1 - 从运行窗口运行wbemtest

2 - 连接到您知道已配置打印机的任何机器。

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

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

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

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

【讨论】:

非常感谢。这是一个很好的开始。

以上是关于从 Windows 打印服务器轮询打印机信息的主要内容,如果未能解决你的问题,请参考以下文章

从 Windows 2012 上运行的服务进行 Web 浏览器打印

打印服务器高可用性已经从windows 2008R2移除

如何从 websocket(客户端)打印流信息?

从 Windows 8 应用程序打印 PDF 文档

JAVA 从所有 Windows 用户帐户中检索所有打印机

如何从 Windows 窗体程序保存打印设置?