Назад | Перейти на главную страницу

Фантомные принтеры в Windows

У меня есть несколько серверов Windows 2012 R2, на которых отображается 300–400 принтеров в Control Panel > Hardware > Devices and Printers. Они также отображаются как очереди печати в диспетчере устройств. Многие из них дублируются - список в 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 get-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 - могут ли они каким-то образом получать эти принтеры друг от друга?

По-видимому, это проблема с Windows Server, если сервер имеет роль RDS И использует удаленный сервер печати, на котором включен рендеринг на стороне клиента.

Простое исправление - добавить записи в реестр, чтобы включить 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

После добавления указанных выше записей включите службу диспетчера очереди печати, и начнется автоматическая периодическая обрезка принтеров.