null

Решение проблем с перенаправленными принтерами на терминальном сервере

Предисловие

Не так давно при расширении нашего заказчика возникла потребность временно предоставить доступ множества новых пользователей не из корпоративной сети к терминальному серверу заказчика на Windows Server 2008R2 с . Естественно, одной из задач было обеспечить возможность печати на локальные печатающие устройства пользователей(добавление принтеров на терминальный сервер технически было нереализуемо по причине расположения печатающих устройств в другом городе/сети/IT-нфраструктуре).
Предварительно выполнив настройку систем и предоставив пользователям ярлыки rdp подключений в день "Д" мы махнули рукой дав старт работы с системой. Счастье от проделаной работы было недолгим. Большое количество пользователей с огромным количеством подключенных принтеров на их рабочих местах повесили сначала пользователей (они не могли определить какой принтер был их, так как появлялись по 40-100 принтеров с одинаковым названием с разницей в Redirect [0-9]), потом и систему печати 1С (при более 130 принтерах окно вывода на печать требовало около 5 минут ожидания, потом и вовсе не открывалось и приложение падало).
Включение наспех в локальных политиках терминального сервера redirect only default printer не решило проблему, и запуск работы пришлось отложить.
 

Что делать?

Отключить у пользователя в свойствах окружения его аккаунта Active directory множественный проброс устройств.
 
Свойста User аккаунта Active Directory
 
Environment - Client Devices - Connect client printers at logon.

В русскоязычном интерфейсе

Среда - Устройства клиента - Подключение принтеров клиента при входе


 

Оставить checkbox 
Default to main client printer
 - По умолчанию выбирать основной принтер клиента
 

Автоматизация

При наличии более одного клиентского аккаунта путь мышкокликания в Active Directory Users and Computers является откровенным моветоном, а при более сотни клиентских аккаунтов еще и настоящим безумием с непреклонным слабоумием.
 
Согласно MSDN:
The Environment, Sessions, Remote Control, and Terminal Services Profile pages are supplied for a user object to support terminal services. The UI elements for these pages do not correspond to individual attributes. Instead, the settings are stored in private data within Active Directory Domain Services. The terminal services settings can be accessed with the IADsTsUserEx interface.

 

Доступ к этим свойствам лежит через IADsTSUserEx interface :

ConnectClientDrivesAtLogon

Read/write

A value that specifies if mapped client drives should be reconnected when a Remote Desktop Services session is started.

ConnectClientPrintersAtLogon

Read/write

A value that specifies whether to reconnect to mapped client printers at logon. The value is one if reconnection is enabled, and zero if reconnection is disabled.

DefaultToMainPrinter

Read/write

A value that specifies whether to print automatically to the client's default printer. The value is one if printing to the client's default printer is enabled, and zero if it is disabled.

Для внесения изменений мы должны выполнить следующие действия над объектами в Active Directory:

Get-ADUser -Filter * -SearchBase "OU=USERS,******,DC=COM" | Foreach {
	$User = [adsi]("LDAP://" + $_.distinguishedname)
	$User.InvokeSet("ConnectClientDrivesAtLogon",1)
	$User.InvokeSet("ConnectClientPrintersAtLogon",0)
	$User.InvokeSet("DefaultToMainPrinter",1) 
	$User.SetInfO()
}

 

Где,

-SearchBase "OU=USERS,******,DC=COM"

 - путь к пользователям в Active Directory,

$User.InvokeSet(Parameter,Value)

- установка для объекта значения Value параметра Parameter через метод InvokeSet интерфейса IADsTSUserEx interface. Список параметров IADsTSUserEx interface описан здесь.

Значение Value

  • 1 - checkbox установлен (включено),
  • 0 - checkbox снят (выключено)

В общем случае так же следует не забыть внести изменения в применяемую на терминальный сервер групповую политику 

Computer Configuration\Policies\Administrative Templates: Policy definitions\Windows Components\Remote Desktop Services\Remote Desktop Session Host\Printer Redirection\Do not set default client printer to be default printer in a session

в состояние Disabled.

If you disable this policy setting, the RD Session Host server automatically maps the client default printer and sets it as the default printer upon connection.

А так же проверить разрешено ли перенаправление устройств на терминальном сервере в свойствах Client Settings подключения в  Remote Desktop Session Host server (установленный checkbox - запрещено, должен быть снят). Иначе проброс принтеров в RDP не будет работать.

Если требуется внести изменения через реестр (regedit в помощь) то путь через

HKLM\Software\Policies\Microsoft\Windows NT\Terminal Services

 

  • fDisableCpm - Выключение перенаправления принтеров
  • RedirectOnlyDefaultClientPrinter - перенаправление только принтера по умолчанию
 
Значения параметров реестра:
  • 1 - checkbox установлен (выключено),
  • 0 - checkbox снят (включено)

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

Эпилог

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