Управление принтерами в 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 - При повторном срабатывании скрипт с такой командой выдаст ошибку, которая может поставить пользователей в тупик.