Вы можете использовать групповые политики (GPO) для установки принтеров на компьютеры пользователей домена Active Directory. В этой статье мы покажем, как автоматически установить принтер пользователю домена при его входе на компьютер.
Рассмотрим следующую конфигурацию: в организации имеется 3 отдела, каждый отдел должен печатать документы на собственном цветном сетевом принтере. Ваша задача настроить автоматическое подключение сетевых принтеров пользователям в зависимости от отдела.
Подключение принтеров доменным пользователям через GPO
Создайте три новые группы безопасности в AD (prn_HPColorSales, prn_HPColorIT, prn_HPColorManagers) и добавьте в нее пользователей отделов (наполнение групп пользователей можно автоматизировать по статье “Динамические группы в AD”). Вы можете создать группы в консоли ADUC, или с помощью командлета New-ADGroup:
New-ADGroup "prnHPColorSales" -path 'OU=Groups,OU=Moscow,DC=corp,dc=winitpro,DC=ru' -GroupScope Global –PassThru
- Запустите консоль редактора доменных политик (GPMC.msc), создайте новую политику prnt_AutoConnect и прилинкуйте ее к Organizational Unit (OU), в котором находятся целевые пользователи; Если у вас в домене используется небольшое количество сетевых принтеров (до 30-50), вы можете использовать одну GPO для установки всех принтеров. Если у вас сложная структура домена, есть сайты AD, используется делегирование прав администраторам филиалов, лучше создать несколько политик подключения принтеров. Например, по одной GPO для каждого сайта или OU.
- Перейдите в режим редактирования политики и разверните секцию User Configuration -> Preferences -> Control Panel Setting -> Printers. Создайте новый элемент политики с именем Shared Printer; Если вы хотите подключать принтер по IP адресу (не через принт-сервер, а напрямую), выберите пункт TCP/IP Printer.
- Действие – Update. В поле Shared Path укажите UNC адрес принтера, например,
\\msk-prnt\hpcolorsales
(в моем примере все принтеры подключены к принт-серверу\\msk-prnt
). Здесь же вы можете указать, нужно ли использовать этот принтер в качестве принтера по-умолчаниюВы можете опубликовать ваши принтеры в Active Directory. Для этого нужно включить опцию List in the Directory в настройках общего сетевого принтера на вкладке Sharing. В этом случае вы можете не указывать имя принетра вручную, а найти его поиском в AD. Просто нажмите кнопку с тремя точками при выборе принтера, нажмите кнопку Find now и выберите имя сетевого принтера из списка. - Перейдите на вкладку Common и укажите, что принтер нужно подключать в контексте пользователя (опция Run in logged-on user’s security context). Затем выберите опцию Item-level targeting и нажмите на кнопку Targeting;
- С помощью нацеливания GPP вам нужно указать, что данная политика подключения принтера применялась только для членов группы prn_HPColorSales. Для этого нажмите New Item -> Security Group -> в качестве имени группы укажите prn_HPColorSales; Обратите внимание, что данное ограничение не запрещает любому пользователю домена подключить это принтер вручную в проводнике Windows. Чтобы ограничить доступ к принтеру, нужно изменить права доступа к нему на принт-сервере, ограничив возможность печати определенными группам.
- Аналогичным образом создайте политики установки сетевых принтеров для других групп пользователей.
При использовании такой групповой политики, новые принтера будут устанавливаться у пользователей, только если на их компьютерах уже установлен соответствующий принтеру драйвер печати (драйвера нужно предварительно установить вручную или интегрировать напрямую в образ Windows).
Если для данного принтера не установлен драйвер, то назначенный через GPO принтер не будет добавлен пользователю. При этом в журнале Event Log -> Application появится событие с Event ID 4096:
Source: Group Policy Printers The user 'HPLaserJet4101' preference item in the 'prnt_AutoConnect {0D83EA70-0077-46A3-882A-C4FEED3DA489}' Group Policy Object did not apply because it failed with error code '0x800702e4 The requested operation requires elevation.' This error was suppressed.
Дело в том, что теперь пользователи Windows без прав администратора не могут установить принтера даже не смотря на настройки политики Point and Print Restriction.
Разрешить установку принтеров через GPO без прав администратора
В 2021 году в сервисе Print Spooler была обнаружена серьезная уязвимость (PrintNightmare CVE-2021-34527), для исправления которой Microsoft изменила поведение Windows при установке драйверов печати. Теперь пользователи без прав администратора не могут установить драйвера для принтера (KB5005033), в том числе с помощью параметра GPO Point and Print. Установку драйверов (подписанных и неподписанных) должны выполнять только пользователи с правами администратора.
Однако есть обходное решение, которое позволит обычным пользователям установить драйвера. Для этого нужно изменить вашу GPO установки принтеров.
- Перейдите в раздел Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> Security Options и измените значение параметра Devices: Prevent users from installing printer drivers на Enabled;
- Теперь перейдите в Computer Configuration -> Policies -> Administrative Templates -> System -> Driver Installation в параметре Allow non-administrators to install drivers for these device setup classes добавьте классы для устройства типа принтеры
{4658ee7e-f050-11d1-b6bd-00c04fa372a7}
и{4d36e979-e325-11ce-bfc1-08002be10318}
. Это разрешит установку только драйверов печати; - Перейдите в раздел Computer Configuration -> Policies -> Administrative Templates -> Printers и включите политику Point and Print Restrictions. Здесь нужно указать список ваших принт-серверов (Users can only point and print to these servers), с которых разрешено устанавливать драйверы печати. В двух оставшихся параметрах выберите Don’t show warning or elevation prompt;
- Добавьте список ваших доверенных прнит-серверов в параметр Package Point and print — Approved servers;
- (Теперь самый важный пункт!!). Чтобы разрешить установку драйвера печати без прав админа нужно временно изменить значение параметра реестра RestrictDriverInstallationToAdministrators на 0.
На отдельном компьютере вы можете изменить этот параметр с помощью команды:
reg add "HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint" /v RestrictDriverInstallationToAdministrators /t REG_DWORD /d 0 /f
Action: Replace Hive : HKEY_LOCAL_MACHINE Key path: Software\Policies\Microsoft\Windows NT\Printers\PointAndPrint Value name : RestrictDriverInstallationToAdministrators Type: REG_DWORD Value: 0
Перейдите на вкладку Common и включите опцию Remove this item when it is no longer applied.
Теперь обновите настройки GPO на клиентах (перелогиньтесь или выполните
gpupdate /force
) и проверьте, что драйвера с принт-серверов теперь устанавливаются автоматически. В журнале Application должны появится события MsiInstaller вида:
EventID 1040 Beginning a Windows Installer transaction: C:\Windows\system32\spool\DRIVERS\x64\3\CIOUM64.MSI. Client Process Id: 7240.
Такая GPO позволит любому пользователю без прав администратора установить сетевые принтера из указанных серверов печати без запроса на повышения прав и уведомлений.
Можно настроить такую схему: при первом входе пользователя на компьютер для пользователя отрабатывает логон скрипт (только один раз), который изменяет значение параметра RestrictDriverInstallationToAdministrators = 1. При следующем запуске этот скрипт проверяет значение RestrictDriverInstallationToAdministrators и, если оно равно 1, меняет его на 0. Таким образом все назначенные пользователю через GPO принтеры будут установлены и значение RestrictDriverInstallationToAdministrators будет автоматически изменено на безопасное.
Обратите внимание, что таким образом можно установить только подписанные драйвера принтеров (Package-aware v3 print drivers). Для таких драйверов в консоли Printer Management (printmanagement.msc) в разделе Drivers должно быть указано Packaged=True. Подробнее об этом здесь https://winitpro.ru/index.php/2016/08/31/update-kb3170455-network-shared-printer-error/
Если вы попытаетесь установить через GPO принтер с неподписанным драйвером, он не будет установлен не смотря на параметр RestrictDriverInstallationToAdministrators:
The user 'BrotherDCP2540' preference item in the 'prnt_AutoConnect {GUID}' Group Policy Object did not apply because it failed with error code '0x80070bcb The specified printer driver was not found on the system and needs to be downloaded.' This error was suppressed.
Элемент предпочтения пользователь "BrotherDCP2540" в объекте групповой политики "Подключение принтеров {GUID}" не применен по причине ошибки с кодом '0x80070bcb Указанный драйвер принтера не найден в системе. Необходимо скачать драйвер.' Эта ошибка была отключена.