Введение

В данном топике я подробно расскажу о том, на какие грабли можно наткнуться при автоматической установке, удалении принтеров средствами Active Directory.
Подготовка AD к установке принтеров
Предполагается, что Active Directory настроена и функционирует. В ней созданы организационные единицы, заведены пользователи и добавлены компьютеры, у пользователей отсутствуют права администратора.
Для начала необходимо сделать 3 вещи:
- Разделить компьютеры по версии и архитектуре ОС.
- Выделить сетевую папку для хранения драйверов принтеров.
- Скачать и распаковать драйвера принтеров в сетевую папку для всех архитектур, созданную в пункте 2.
Разделяем компьютеры по арxитектуре и версии ОС
Я опишу случай, когда целевые компьютеры находятся в различных организационных единицах, при этом имеют разную архитектуру.
- Создаем группы безопасности соответствующие каждой архитектуре и версии ОС, пример: win_x64, win_x32. (Я использовал только 2 группы, так как в моем парке компьютеров существуют либо Windows XP x32, либо Windows 7 x64.).
- Создаем политики с понятными названиями и ограничиваем доступ к этим политикам только для групп безопасности из предыдущего пункта. Пример: «Политика принтеров x32», доступ только для членов группы win_x32.
- Применяем созданные политики ко всем организационным единицам. Самый лучший способ это сделать, по моему мнению — это поместить все OU внутри одной и к ней применить новые политики.
- Делаем компьютеры с архитектурой ОС x32 членами группы win_x32, для других архитектур и версий соответственно.
Таким образом, у нас появилась возможность применить определенную политику к компьютерам из разных OU (организационных единиц), что весьма удобно. Просто и надежно.
Разделение можно организовать и другими способами, но в данном посте я эти варианты рассматривать не буду.
Сетевая папка
Создается сетевая папка доступная всем пользователям и компьютерам домена. Думаю, этот этап подробно расписывать нет необходимости. Права на папку — только чтение.
Драйвера
- Скачиваем драйвера для всех версий и архитектур.
- Распаковываем их до состояния INF файлов. Грабля №1. Если с этим возникают проблемы, то чаще всего драйвера можно найти в скрытой шаре PRINT$ на машине где установлен принтер. Их можно взять оттуда.
- Копируем эти файлы у нашу сетевую папку. Для удобства разделяем по подпапкам.
Теперь можно переходить к развертыванию.
Развертывание
Развертывание будет делаться в 2 этапа:
- Создание скрипта установки драйвера.
- Создание скрипта подключения пользователя к принтеру.
Внимание! Грабля №2 Пункт 1 актуален только для Windows Vista и новее, так как драйвер на Windows XP ставится с правами обычного пользователя и не требует админских прав. Как ни странно.
Скрипт установки драйвера
Этот скрипт помещается в разделе «Конфигурация компьютера» — «Политики» — «Конфигурация Windows» — «Сценарии (запуск/завершение)» — «Автозагрузка»
Создаем файл .BAT такого содержания:
rundll32 printui.dll,PrintUIEntry /ia /m "<Имя принтера 1>" /h "x64" /v "Type 3 - User Mode" /f "<путь к INF файлу драйвера в сетевой папке/x64/>"
rundll32 printui.dll,PrintUIEntry /ia /m "<Имя принтера 2>" /h "x64" /v "Type 3 - User Mode" /f "<путь к INF файлу драйвера в сетевой папке/x64/>"
Грабля №3 Имя принтера можно и нужно узнать в свойствах сервера печати Windows на машине, где драйвер уже установлен. Наверняка есть и в inf файле.
Теперь драйвер принтера будет устанавливаться при загрузке системы автоматически. Если применить его ко всем компьютерам с Windows Vista и новее, то при срабатывании скрипта подключения принтера не выскочит ошибка о недостаточности прав.
Скрипт подключение принтеров
Этот скрипт помещается в разделе «Конфигурация пользователя» — «Политики» — «Конфигурация Windows» — «Сценарии (вход/выход из системы)» — «Вход в систему»
Для обеих архитектур скрипт одинаков.
rem Подключаем сетевой принтер "officeprint" на сервере server
rundll32 printui.dll,PrintUIEntry /in /n \\server\officeprint /q
rem Подключаем сетевой принтер "print" на сервере server1
rundll32 printui.dll,PrintUIEntry /in /n \\server1\print /q
rem Ставим его по умолчанию
rundll32 printui.dll,PrintUIEntry /in /n \\server1\print /y /q
Теперь при входе в систему пользователю автоматически подключатся принтеры и по умолчанию выберется принтер «print» на server1.
Автоматическое удаление принтеров
Все достаточно просто.
Создаем .BAT файл вот с таким содержанием.
REG DELETE "HKEY_CURRENT_USER\Printers\Connections" /f
Затем делаем его скриптом на выход пользователя из системы.
Когда пользователь в следующий раз зайдет в сеть, у него будут только те принтеры, которые установятся политикой.
Полезно при переезде принтера с одного принт-сервера на другой.
Грабля №4 Удаление ветки реестра лучше производить при выходе пользователя из системы, а не при входе перед подключением принтеров.
Для этого требуется перезагрузка службы печати, которая может перезагружаться достаточно долго. Это черевато ситуацией, когда служба еще не запустилась, а скрипт подключения уже сработал и вызвал ошибку.
Автоматическое удаление драйверов принтеров
Данная операция может потребоваться при обновлении драйвера.
Желательно удалять вручную, но если принтеров очень много, то делается это вот такой командой:
rundll32 printui.dll,PrintUIEntry /dd /m "<Имя принтера>"
Грабля №5 При повторном срабатывании скрипт с такой командой выдаст ошибку, которая может поставить пользователей в тупик.