Pull to refresh

Управление принтерами в Active Directory с помощью скриптов для разных версий ОС

Reading time 4 min
Views 59K

Введение



image

В данном топике я подробно расскажу о том, на какие грабли можно наткнуться при автоматической установке, удалении принтеров средствами Active Directory.


Подготовка AD к установке принтеров


Предполагается, что Active Directory настроена и функционирует. В ней созданы организационные единицы, заведены пользователи и добавлены компьютеры, у пользователей отсутствуют права администратора.
Для начала необходимо сделать 3 вещи:
  1. Разделить компьютеры по версии и архитектуре ОС.
  2. Выделить сетевую папку для хранения драйверов принтеров.
  3. Скачать и распаковать драйвера принтеров в сетевую папку для всех архитектур, созданную в пункте 2.

Разделяем компьютеры по арxитектуре и версии ОС

Я опишу случай, когда целевые компьютеры находятся в различных организационных единицах, при этом имеют разную архитектуру.
  1. Создаем группы безопасности соответствующие каждой архитектуре и версии ОС, пример: win_x64, win_x32. (Я использовал только 2 группы, так как в моем парке компьютеров существуют либо Windows XP x32, либо Windows 7 x64.).
  2. Создаем политики с понятными названиями и ограничиваем доступ к этим политикам только для групп безопасности из предыдущего пункта. Пример: «Политика принтеров x32», доступ только для членов группы win_x32.
  3. Применяем созданные политики ко всем организационным единицам. Самый лучший способ это сделать, по моему мнению — это поместить все OU внутри одной и к ней применить новые политики.
  4. Делаем компьютеры с архитектурой ОС x32 членами группы win_x32, для других архитектур и версий соответственно.

Таким образом, у нас появилась возможность применить определенную политику к компьютерам из разных OU (организационных единиц), что весьма удобно. Просто и надежно.
Разделение можно организовать и другими способами, но в данном посте я эти варианты рассматривать не буду.

Сетевая папка

Создается сетевая папка доступная всем пользователям и компьютерам домена. Думаю, этот этап подробно расписывать нет необходимости. Права на папку — только чтение.

Драйвера

  1. Скачиваем драйвера для всех версий и архитектур.
  2. Распаковываем их до состояния INF файлов. Грабля №1. Если с этим возникают проблемы, то чаще всего драйвера можно найти в скрытой шаре PRINT$ на машине где установлен принтер. Их можно взять оттуда.
  3. Копируем эти файлы у нашу сетевую папку. Для удобства разделяем по подпапкам.

Теперь можно переходить к развертыванию.

Развертывание


Развертывание будет делаться в 2 этапа:
  1. Создание скрипта установки драйвера.
  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 При повторном срабатывании скрипт с такой командой выдаст ошибку, которая может поставить пользователей в тупик.
Tags:
Hubs:
+2
Comments 16
Comments Comments 16

Articles