我有几个 Windows 2012 R2 服务器,它们都在Control Panel
> Hardware
>中显示 300 - 400 台打印机Devices and Printers
。它们还在设备管理器中显示为打印队列。其中许多是重复的 - 设备和打印机中的列表如下所示:
Printer_A on Print_Server_1
Printer_A on Print_Server_1
Printer_A on Print_Server_1
Printer_A on Print_Server_1
Printer_A on Print_Server_1
Printer_B on Print_Server_1
Printer_B on Print_Server_1
Printer_X on Print_Server_2
Printer_X on Print_Server_2
Printer_X on Print_Server_2
Printer_X on Print_Server_2
我可以通过选择打印机并单击“删除设备”来删除“设备和打印机”中的打印机。打印机似乎已被删除,但在我注销并重新登录后又会显示出来。
当我运行这个程序时,我看到一个空列表(0 台打印机):
c:\windows\system32\rundll32.exe printui.dll,PrintUIEntry /ge
PowerShell cmdletget-printer
仅列出五打印机,就像这样:
cscript c:\windows\system32\printing_admin_scripts\en-us\prnmngr.vbs -l
我看到这个键下有相同的五台打印机:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers
我看到这个键下有 23 个连接(没有重复):
HKEY_CURRENT_USER\Printers\Connections
我如何才能确定这数百台打印机来自何处,以便可以永久删除它们?这些服务器在 RDS 中进行代理 - 它们能否以某种方式相互获取这些打印机?
答案1
显然,如果服务器具有 RDS 角色并且正在使用启用了客户端渲染的远程打印服务器,则这是 Windows Server 的问题。
一个简单的解决方法是添加注册表项,以启用 15 分钟的打印机列表修剪,并在注销时自动删除:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Providers\Client Side Rendering Print Provider]
"InactiveGuidPrinterAge"=dword:00000384
"ActiveGuidPrinterAge"=dword:00000384
"InactiveGuidPrinterTrim"=dword:00000384
"RemovePrintersAtLogoff"=dword:00000001
添加上述条目后,启动打印后台处理程序服务并开始自动定期修剪打印机。