如何在 Windows Server 2008 R2 集群打印服务器上编写打印机创建脚本?

如何在 Windows Server 2008 R2 集群打印服务器上编写打印机创建脚本?

根据主题。

我已经找到了一些使用 WMI 在 Windows 打印服务器上编写打印机创建脚本的方法,但 WMI 似乎不支持群集打印服务器(或群集服务器根本)。

中的脚本C:\Windows\System32\Printing_Admin_Scripts是无用的,因为它们不具备集群感知能力并且最终会在活动集群节点上创建打印机(就像使用 WMI 一样)。

我发现的唯一能够在集群打印服务器上工作的工具是printui.exe(的快捷方式rundll32 printui.dll, PrintUIEntry),但它无法创建 TCP 打印端口:只有在端口已存在时它才能添加打印机。

我如何完整编写打印机创建脚本(包括 TCP 打印端口!) 在群集 Windows Server 2008 R2 打印服务器上?

答案1

我不知道这是否适用于集群环境,但有一个老旧的 printbrm.exe 工具。它创建了一个本质上是充满 XML 的 cab 文件,可以在服务器之间备份和恢复打印机设置。这包括可怕的 TCP/IP 端口。这可能让您进行简单的备份,修改 XML 以添加您需要的内容,并让您恢复到您的集群。(再次,不确定这是否是集群感知的)。

Printbrm 示例: http://technet.microsoft.com/en-us/library/cc722360.aspx

将文件重命名为 .cab 并提取到磁盘...

端口文件是 brmports.xml。我建议导出一两台打印机,看看它“应该”是什么样子。

答案2

答案3

我能够创建端口的唯一方法是先使用 VBS,然后再使用 printui:

Set objWMIService = GetObject("winmgmts:")
Set objNewPort = objWMIService.Get _
("Win32_TCPIPPrinterPort").SpawnInstance_
objRAWPort.Name = "IP_192.168.1.2"
objRAWPort.Protocol = 1
objRAWPort.HostAddress = "192.168.1.2"
objRAWPort.PortNumber = "9100"
objRAWPort.Put_

Set objWMIService2 = GetObject("winmgmts:")
Set objNewPort2 = objWMIService2.Get _
("Win32_TCPIPPrinterPort").SpawnInstance_
objLPRPort.Name = "IP_192.168.1.3"
objLPRPort.Protocol = 2
objLPRPort.HostAddress = "192.168.1.3"
objLPRPort.Queue = "MyQueue"
objLPRPort.ByteCount = True
objLPRPort.Put_

cmd = "rundll32 printui.dll,PrintUIEntry /if /b "PRINTER NAME" /f %windir%\inf\ntprint.inf /r "IP_192.168.1.2" /m "HP Color LaserJet 4550 PS" /Z

objCommandShell.Run cmd,,True

可能存在一些错误,但这是总体思路。

答案4

您见过这个 GPO 设置吗?

Computer Configuration > Preferences > Control Panel Settings > Printers。然后右击转到New > TCP/IP Printer

不熟悉集群打印服务器,但它应该适合您的 TCP/IP 打印映射。

相关内容