1

Тема: HTA+VBS: Подключение принтеров в домене

Эта тема не с вопросом, скорее просто заметка для себя на будущее.
Полагаю, она будет интересна довольно узкому кругу лиц. Ну или вообще только мне.

Условия.
- Домен AD
- Огромная куча мелких разношёрстных принтеров
- Изначальное отсутствие репозитория драйверов к этим принтерам.
- Любовь пользователей к пересаживанию с места на место
- Компьютеры переезжают редко

Проблема.
При пересаживании на другое место или при первом входе нового пользователя в его профиле нет принтера, если, конечно, принтер не подключен именно к этому компьютеру или не установлен сетевой принтер (это тот, который имеет RJ-45, типа HP 1536 dnf).
В результате приходится подключаться к компу и писать на нём \\имя_компа_с_расшаренным_принтером\имя_расшаренного_принтера
Это не долго, и если бы раз в год, то я бы и не заморачивался.
К сожалению, эту процедуру мне приходится делать 5 (+-3) раза в неделю. Сами пользователи делать это не будут. И точка. В смысле, не барское это дело.

Концепция следующая.

1) При помощи утилит DevCon (Microsoft) и PsExec (Microsoft) можно получить подключенный принтер на компьютере. Плюс так же состоит в том, что данный метод позволяет узнать именно реально подключенный к компьютеру принтер, а не кучу левых, случайно установленных, как это получается через WMI (прошу не пинать, почти уверен, что если докопаться, то через WMI тоже можно получить этот принтер).

2) Сделать этот принтер сетевыми. В этом поможет утилита RawPrintServer (SourceForge) и тот же PsExec.

3) Импортировать драйвера от этого принтера в сеть. Тут я использовал PsExec (куда без него), PDRVGen (внезапно Novell) и AutoItx3.dll (как COM для vbs) (AutoIt). AutoIt в моём случае уже был раскидан по всем компам ранее, для других целей.

4) Подключить этот принтер как сетевой, используя в качестве порта имя компьютера.

Результат
На компьютер установлен сетевой принтер, который будет в любом профиле. И если сам комп никуда не переезжает, комп с принтером работает, комп с принтером не переименован - у любого пользователя на этом компьютере есть правильный принтер (-ы).

Код не выкладываю, т.к. сейчас в нём, к сожалению, много абсолютных путей и прочего мусора. К тому же он сыроват. Я успокоился, когда он заработал. Возможно чуть позже буду его "универсалить".
В общем, надеюсь, что концепция кому-нибудь пригодится.

"Единство,- возвестил оракул наших дней: -
Быть может спаяно железом лишь и кровью"…
Но мы попробуем спаять его любовью,-
А там увидим, что прочней…    (Ф. Тютчев)       Тут хорошая справка по vbs.

2

Re: HTA+VBS: Подключение принтеров в домене

OFF:

MikeSh пишет:

При пересаживании на другое место…

Я использую перемещаемые профили. Это, конечно, не решает вопрос для локальных принтеров.

MikeSh пишет:

Сами пользователи делать это не будут. И точка. В смысле, не барское это дело.

Сочувствую. У меня делают сами.

MikeSh пишет:

2) Сделать этот принтер сетевыми.

Это как? Может быть — дать доступ к принтеру по сети?

MikeSh пишет:

В общем, надеюсь, что концепция кому-нибудь пригодится.

Конечно. Можете прилагать код и конкретные решения.

3

Re: HTA+VBS: Подключение принтеров в домене

alexii пишет:

OFF:
Я использую перемещаемые профили. Это, конечно, не решает вопрос для локальных принтеров.

Не решает.

alexii пишет:

Сочувствую. У меня делают сами.

Сочувствие принято. В моём случае отдел ИТ хоть и является штатной единицей предприятия, но поставлен в рамки аутсорсинга, т.е. клиент всегда прав.
Если клиент не доволен - лови минус к зарплате.

alexii пишет:

Это как? Может быть — дать доступ к принтеру по сети?

Нет. Именно сделать сетевым. Т.е. как бы включенным в сеть напрямую.
Если вы знакомы с usb-принтсерверами, например этим, то должны представлять, о чём идёт речь.
В моём случае принт-сервером выступает весь компьютер.

Ещё один случайно выявленный плюс. Для меня имеет огромное значение.
Некоторая программа, которая печатает этикетки-ценники, не умеет работать с расшаренными принтерами, только с локальными. При такой схеме подключения принтер выглядит именно локальным, соответственно можно оставить в кабинете всего один принтер этикеток.

alexii пишет:

Конечно. Можете прилагать код и конкретные решения.

Приложу.

"Единство,- возвестил оракул наших дней: -
Быть может спаяно железом лишь и кровью"…
Но мы попробуем спаять его любовью,-
А там увидим, что прочней…    (Ф. Тютчев)       Тут хорошая справка по vbs.

4 (изменено: Dmitrii, 2012-04-30 14:32:54)

Re: HTA+VBS: Подключение принтеров в домене

MikeSh пишет:

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

Каковы признаки "реально подключенного" принтера и "левых" принтеров?

MikeSh пишет:

... Импортировать драйвера от этого принтера в сеть...

В чём заключается эта процедура?

MikeSh пишет:

... На компьютер установлен сетевой принтер, который будет в любом профиле...

А весьма капризные (судя по Вашему описанию) пользователи потом безропотно идут к находящемуся "где-то там" принтеру вместо того, чтобы взять свой напечатанный документ "у себя под носом"?

5

Re: HTA+VBS: Подключение принтеров в домене

Dmitrii пишет:

Каковы признаки "реально подключенного" принтера и "левых" принтеров?

Вы никогда не замечали установленного принтера Agfa AccuSet среди прочих принтеров пользователя? Оно получается следующим образом: Пуск-Принтеры и факсы-Установка принтера-Далее-...-Далее-Ок
Вот один из примеров появления левого принтера.
Утилита DevCon просматривает только реально подключенные устройства, среди которых, конечно, не будет этой агфы (ну если, конечно, у вас реально нет этого принтера)
У этого решения есть и минус.
Если принтер подключен к компу, но выключен, то она его не найдёт.
С этими случаями я готов мириться, их то как раз 1 на миллион

Dmitrii пишет:

В чём заключается эта процедура?

Утилита PDRVGen позволяет импортировать любой драйвер принтера, который установлен на данном компьютере.
Я импортирую нужный драйвер в специально указанное место, тем самым формирую репозиторий драйверов принтеров, из которого потом и устанавливаю принтер.
Действие может показаться избыточным или даже ненужным, но тут есть свой резон.
Во-первых, изначально у меня не было этих драйверов в одном месте, теперь будут.
Во-вторых, установка драйвера производится скриптом, одним из обязательных аргументов которого является полный путь к inf-файлу драйвера. Даже при наличии скачанного родного драйвера принтера узнать имя нужного inf-файла автоматически - задача не тривиальная. Утилита PDRVGen формирует свой pdrvgen.inf, соответственно, когда я устанавливаю драйвер то указываю в качестве аргумента \\Server\PrnDrv$\Имя_Принтера\pdrvgen.inf
Есть нюанс. В данном случае принтер получается не подписанный. Как это победить - пока не знаю, но думаю, что разберусь. Пока не критично.

Dmitrii пишет:

А весьма капризные (судя по Вашему описанию) пользователи потом безропотно идут к находящемуся "где-то там" принтеру вместо того, чтобы взять свой напечатанный документ "у себя под носом"?

Я полагаю, вы меня неправильно поняли. Никто никуда не бегает, для них вообще ничего не меняется, ну кроме имени принтера.
Было название "Canon LBP3000 на w000141", а стало "Canon LBP3000 (w000141)".
Поясню на примере
Было
Компьютер w000141, к нему через usb подключен принтер Canon LBP3000
На компьютер w000458 садится новый пользователь. В его профиле нет нужного принтера. Соответственно, я подключаюсь к компьютеру w000458 когда на него залогинился нужный пользователь, Пуск-Выполнить-\\w000141, ПКМ на принтере-Подключить.
Стало
Компьютер w000141, к нему через usb подключен принтер Canon LBP3000.
Я знаю, что с компьютера w000458 нужно печатать на этот принтер и устанавливаю его как сетевой (на порт 9100)
На компьютер w000458 садится новый пользователь. В его профиле (точнее в профиле компьютера) есть нужный принтер "Canon LBP3000 (w000141)".
Результат достигнут.

"Единство,- возвестил оракул наших дней: -
Быть может спаяно железом лишь и кровью"…
Но мы попробуем спаять его любовью,-
А там увидим, что прочней…    (Ф. Тютчев)       Тут хорошая справка по vbs.

6 (изменено: Dmitrii, 2012-04-30 23:09:26)

Re: HTA+VBS: Подключение принтеров в домене

... Вы никогда не замечали установленного принтера Agfa AccuSet среди прочих принтеров пользователя?..

Нет. В нашей сети пользователи не имеют пономочий на установку драйверов принтеров, а сотрудники ИТ-отдела понимают, что они делают.
Однако я ожидал обобщённого критерия, а не частного примера.

... Утилита DevCon просматривает только реально подключенные устройства <...> Если принтер подключен к компу, но выключен, то она его не найдёт...

Надо ли понимать, что "реально подключенный принтер" - это принтер, включенный и находящийся в состоянии "Готов" в данный момент?

... PDRVGen позволяет импортировать любой драйвер принтера, который установлен на данном компьютере...

Вероятно,- экспортировать?

... когда я устанавливаю драйвер...

В чьём контексте безопасности выполняется эта процедура?

... Компьютер w000141, к нему через usb подключен принтер Canon LBP3000. Я знаю, что с компьютера w000458 нужно печатать на этот принтер...

Каким бы способом Вы ни обеспечили пользователю нужное "направление" печати, напечатанный документ надо будет забирать там, где принтер находится физически (т.е. около станции w000141), а не там, где стоит станция w000458.
Или я опять чего-то не понимаю?

7

Re: HTA+VBS: Подключение принтеров в домене

Dmitrii пишет:

Надо ли понимать, что "реально подключенный принтер" - это принтер, включенный и находящийся в состоянии "Готов" в данный момент?

Обобщённый критерий, он же реально подключенный принтер, в моём случае таков : Локальный принтер, подключенный к локальному компьютеру "шнурком" usb или LPT (BT, FireWire, IrDA, COM - таких нет) и включенный в данный момент. Все остальные принтеры, например "Microsoft XPS Document Writer", меня не интересуют.

Dmitrii пишет:

Вероятно,- экспортировать?

Да, экспортировать.

Dmitrii пишет:

В чьём контексте безопасности выполняется эта процедура?

В контексте безопасности пользователя в данный момент. Прав достаточно. Но вообще этот вопрос навёл меня на интересные рассуждения, которые приведут, скорее всего, к глобальной переписке кода. Спасибо.

Dmitrii пишет:

Каким бы способом Вы ни обеспечили пользователю нужное "направление" печати, напечатанный документ надо будет забирать там, где принтер находится физически (т.е. около станции w000141), а не там, где стоит станция w000458.
Или я опять чего-то не понимаю?

Вы правильно понимаете, но не до конца, судя по вопросу.
Смысл всего процесса не задать правильное направление печати, а сделать это один раз.
Он и раньше бы забирал результат печати около станции w000141, т.к. у компьютера w000458 принтера нет, а этот ближайший.
Просто сейчас, когда за компьютер w000458 сядет новый пользователь, мне уже не придётся устанавливать ему принтер, т.к. он уже будет прописан в профиле компьютера.

"Единство,- возвестил оракул наших дней: -
Быть может спаяно железом лишь и кровью"…
Но мы попробуем спаять его любовью,-
А там увидим, что прочней…    (Ф. Тютчев)       Тут хорошая справка по vbs.

8

Re: HTA+VBS: Подключение принтеров в домене

MikeSh пишет:

[..]
Проблема.
При пересаживании на другое место или при первом входе нового пользователя в его профиле нет принтера, если, конечно, принтер не подключен именно к этому компьютеру или не установлен сетевой принтер (это тот, который имеет RJ-45, типа HP 1536 dnf).
В результате приходится подключаться к компу и писать на нём \\имя_компа_с_расшаренным_принтером\имя_расшаренного_принтера
Это не долго, и если бы раз в год, то я бы и не заморачивался.
К сожалению, эту процедуру мне приходится делать 5 (+-3) раза в неделю. Сами пользователи делать это не будут. И точка. В смысле, не барское это дело.
[..]

Когда мне в случае недоступности/неадекватности пользователя приходится решать самому - с каким сетевым/расшаренным принтером работать новому пользователю машины, то я смотрю в профиль пользователя, который перед этим был за этой машиной.

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

Далее, если принтер у предыдущего был сетевой, то его устанавливаю по умолчанию для текущего юзера - делаю аналогичную запись в реестр HKU текущего пользователя (это удобно сделать другой моей утилитой - printerListPC.hta - она, кстати, через WMI показывает установленные принтера, их готовность и задействованные порты), а если был расшаренный, а такое бывает очень редко - то таки приходится подключаться в сессию пользователя Ассистентом.

WBR. Roman