Как стать автором
Обновить

Комментарии 6

К сожалению, первая статься прошла мимо меня, к ней много вопросов, начиная от идиотского диалога с пользователем и не менее идиотского progressbar'а при установке, заканчивая выбранным способом подключения принтеров.
Поэтому пройдусь только по второй статье.
А что если у нас завтра будет не VBS, а PowerShell скрипт или любой другой? Поэтому в таблицу systemsettings добавил еще одну строку, где в столбец «parameter» вписал «installscriptextension», а в «value» значение «vbs»

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

Кстати, у пользователей браузер не ругается на скачивание/запуск BAT-файла? Во всех браузерах работает или у вас просто политиками принят IE?

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

У вас же все принтеры подключены к принтсерверу и расшарены. Печать всё равно пойдёт через сервер, если с сервера нет доступа, то и печатать не будет, разве нет?

...(или вообще отключен ICMP)...

Можно попробовать соединиться с 80 портом принтера, это web-интерфейс, если пингов нет, а web-интерфейс открылся — значит принтер онлайн.

В любом случае проект хоть и костыльный, но полезный для вас. Заставил изучить (или хотя бы не забыть) PHP/JAVA/SQL и прочие составляющие. В HelpDesk'е всё это никак не развивается.
У вас скрипты для разных принтеров отличаются? Не итоговые, с заменёнными переменными, которые получает юзер, а те, которые лежат в базе.

Нет, не отличается. Скрипт один и тот же для всех принтеров.

Если для каждого принтера — один и тот же скрипт из первой статьи, то зачем его хранить в БД, да ещё и расширение отдельно?

А если вам необходимо будет делать не VBS скрипт а свой PowerShell? В таком случае вы поменяете расширение генерируемого скрипта на ps1.

Вынести его в шаблон и наслаждаться лёгкостью доработок.

Ну вот это и есть шаблон один на всех.

На скриншоте vbs вводят руками, а если опечатка?

Ну напишите скрипт где угодно, протестируйте, потом copy paste туда, где сможете вдобавок переменные вставить, значения которых будут тянутся из БД для каждого принтера и меняться нужным значением в итоговом скачиваемом файле, любого расширения, которое вы укажете. Чем не template?

Кстати, у пользователей браузер не ругается на скачивание/запуск BAT-файла? Во всех браузерах работает или у вас просто политиками принят IE?

Ни один браузер не ругается. Все прекрасно скачивается.

У вас же все принтеры подключены к принтсерверу и расшарены. Печать всё равно пойдёт через сервер, если с сервера нет доступа, то и печатать не будет, разве нет?

А не обязательно система должна крутиться на принтер сервере. У кого-то уже может быть развернуто на каком-то другом тестовом сервере (может даже на Linux-e) tomcat и он решил не парится и сразу задеплоить туда, или вообще в свой доккер контейнер запихнуть. И скорее всего, что это изолированная другая сеть и оттуда нет доступов до принтеров. Ну а кто-то решил все на принтер сервере поставить, тогда ваше утверждение верно.

Можно попробовать соединиться с 80 портом принтера, это web-интерфейс, если пингов нет, а web-интерфейс открылся — значит принтер онлайн.

Веб интерфейс принтера может быть отключен, конечно, нигде я не видел такое, но все может быть. Или может даже быть настроен файрвол, который блокирует 80 порт на принтер влан. Пинг мне кажется более надежным.
У вас скрипты для разных принтеров отличаются?

Нет, не отличается. Скрипт один и тот же для всех принтеров.

Извиняюсь, сначала подумал, что для каждого принтера свой скрипт в базе лежит. Изучил более внимательно скриншоты и схему БД, был неправ.
Но тогда, с другой стороны, у вас сейчас ОДИН шаблон для всех принтеров?
Пока у пользователей Win-only машины и все принтеры расшарены на принтсервере — всё ОК.
Как только появится рабочее место с Linux/MacOS — там заработает?
Если надо будет подключить принтера НЕ через принт-сервер, одним скриптом уже сложно будет обойтись. Можно, но в нём будет куча ветвлений для разных вендоров/способов подключения.

А не обязательно система должна крутиться на принтер сервере.

Если принт-сервер и PrintDesk на разных серверах, тогда можно через WMI/PS удалённо пинговать принтера с принт-сервера. Наличие пинга от юзера до принтера бесполезно, если вы печатаете через принт-сервер. Для безпринтсерверных случаев придётся переделывать, чтобы пинговалось именно с пользовательской машины.
В любом случае, нужна сетевая доступность именно с того ПК/сервера, через который идёт печать.

Ни один браузер не ругается. Все прекрасно скачивается.

А вы пробовали ВНЕ вашей инфраструктуры? Может у вас админы просто всё разрешили? Браузеры обычно не любят, когда скачивают bat/vbs/msg/exe/xml и т.д.

Веб интерфейс принтера может быть отключен, конечно, нигде я не видел такое, но все может быть.… Пинг мне кажется более надежным.

я ж не спорю:
если пингов нет, а web-интерфейс открылся — значит принтер онлайн

Пинг тоже может блокироваться. Web-интерфейс — просто вторая вещь, которую можно быстро и просто проверить (даже вручную, через браузер или telnet).
Может и 80 порт блокироваться, суровые безопасники могут вообще оставить только минимальный набор портов, необходимый для печати (вроде 139 или 9100)
А ведь есть ещё snmp…
А если с сетевиками дружить, то они ещё и данные непосредственно с коммутаторов могут подогнать…

Возвращаясь к значку online для принтера — из JS в браузере можно попробовать отправлять запрос какой-нибудь странички веб-интерфейса — тогда будет «пинг» с машины пользователя. Но, возможно, ещё с кешированием придётся побороться.

P.s. пока писал, вспомнил вот этот комментарий и понял, что именно мне не нравится в статье — всё самое важное пропущено: началось с описания ТЗ (хотя, наверняка, оно подгонялось под остальную часть статьи), потом небольшое (ну действительно, маленькое) отступление о том, что автор впервые пишет на JAVA, как он выбрал IDE, описать БД, потом описать пару кейсов, добавить кусок скрипта «шобнаодинэкранневлезало», состоящего из почти идентичных строк и в конец накидать скриншотов готовой системы (хорошо хоть под кат). Где-то после описания второй проблемы система внезапно оказалась готова к тиражированию, отчего возникла третья проблема (чистая установка с созданием БД).
У вас правда не было других трудностей, кроме 3-4 перечисленных?
Первая проблема вообще оффтопик, вторая хоть как-то связана с темой, а третья вроде должна показать, что PrintDesk «готов к работе» не только в инфрастуктуре автора… четвертая — решена только для одного случая (PrintDesk развернут на принт-сервере) из… скольки?

На деле же, получается, решали надуманную проблему не самым оптимальным способом.
Почему проблема надуманная? Вы просто переложили работу на плечи пользователя. Вместо своей работы он должен заниматься настройкой ПК. Я ещё могу понять, если речь о BYOD или гипер-мобильных сотрудниках с ноутбуками, но в статье об этом не сказано.
Админы AD у вас не настраивают GPO (но сервачок 2012 R2 таки выделили), техподдержка не настраивает принтеры, нахрена они все тогда нужны? Кто-то ковыряется в носу, кто-то (как вы) пилит свои велосипеды, прокачивает скилы (что похвально, но не всегда соответствует целям бизнеса). А работу всё равно выполняет пользователь. Причём, судя по предыдущей статье — неграмотный пользователь.
Почему нельзя при первом подключении ПК (или переезде) на рабочем месте ОДИН РАЗ установить драйвера всех ближайших принтеров (если не запрещено подключаться напрямую к принтеру, без принт-сервера)?
Почему не кинуть скрипт в автозагрузку, который будет подключать все принтера филиала при логоне (если кол-во принтеров в филиале не чрезмерное; чужие можно отсеивать по маске сети)?
Если уж заставили делать свою работу пользователей — чем ДЛЯ ПОЛЬЗОВАТЕЛЕЙ ваше решение лучше просто списка расшаренных принтеров в нативном интерфейсе ОС (если ОС не древняя — набрать в ПУСКе «принтер», выбрать «Добавить принтер», клик на принтере и выбрать «Добавить/Подключиться»)? Если не хочется видеть принтера других филиалов, можно на файловой шаре создать для филиалов папки и в них накидать установочные ярлыки (примерно как писали тут). Это УЖЕ работает, поэтому выше я написал, что «проблема» решена не оптимальным способом (хотя автор частенько упоминает минимализм).
Из реально полезного — наклейки на сами принтеры.
Как только появится рабочее место с Linux/MacOS — там заработает?

Я думал об этом и решение оставил на будущие версии. Пока только так.

А вы пробовали ВНЕ вашей инфраструктуры? Может у вас админы просто всё разрешили?

Так я и есть админ. Мы ничего не разрешали. Даже наоборот. Разрешили только то, что необходимо, а все остальное под запретом.

Браузеры обычно не любят, когда скачивают bat/vbs/msg/exe/xml и т.д.

Знаю, но тем не менее и вне, и внутри с очень жесткими ограничениями все работает.

У вас правда не было других трудностей, кроме 3-4 перечисленных?

Вроде остальное все было ОК. Обычное рутинное создание страниц, с содержанием и функционалом.

Первая проблема вообще оффтопик,

Не соглашусь с этим. Не запускается Servlet (напрямую открыли JSP файл), не работает вывод нужных данных из бд, а значит куча жалоб «твоя система не работает!»

четвертая — решена только для одного случая (PrintDesk развернут на принт-сервере) из… скольки?

Ну, а кто мешает ставить ее на много разных принт серверов, если они есть? Поставил, настроил и все. Правда смысла в этом тоже не вижу. Одной установки достаточно, как мне кажется.

Возвращаясь к значку online для принтера — из JS в браузере можно попробовать отправлять запрос какой-нибудь странички веб-интерфейса — тогда будет «пинг» с машины пользователя. Но, возможно, ещё с кешированием придётся побороться.

Записал как фичу для реализации в будущем, чтобы можно было выбрать КАК проверять: пингом или проверкой веб адреса

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

А кто сказал, что он настройкой компьютера занимается. Пользователю дается полностью готовый комп в том числе с подключенным принтером. Если ему надо больше принтеров, то он может сам подключить, что ему нужно, а при возникновении проблемы конечно же обратиться в техподдержку. Так если не сказано, это не значит, что этого нет. Система хоть как-то снижает нагрузку на техподдержку. Пользователю не приходится лишний раз куда-то звонить, кого-то теребить, писать заявку. Зачем ему эта возня, если он сам методом «скачал запустил» запросто поставил себе то, что ему нужно. Профит двухсторонний.

Админы AD у вас не настраивают GPO (но сервачок 2012 R2 таки выделили), техподдержка не настраивает принтеры, нахрена они все тогда нужны?

Данные утверждения в корне ошибочны и не соответсвуют действительности, и в прочем я виноват, что у вас сложилось такое впечатление. Я вообще не считаю, что админ чуть-что должен создавать GPO шки. Конечно я понимаю, что предназначение GPO как раз таки для облегчения задач админу, но плодить сотни GPO и «чуть что запихнем все в GPO» я не считаю правильным.

Причём, судя по предыдущей статье — неграмотный пользователь.

А с каких пор пользователи бывают грамотнымы (в IT), по карайней мере подавляющее большинство? И это везде одинаково. К тому же они и не обязаны быть гиками. Они умеют делать свою работу, что от них и требует начальство. А скачать запустить что-то они все смогут, ведь дома же все на своих компьютерах делают, разве нет? Так чем отличается это «скачать и запустить», от домашнего «скачать запустить»? Возникнет проблема — позвонит в техподдержку. Делов-то…

Почему нельзя при первом подключении ПК (или переезде) на рабочем месте ОДИН РАЗ установить драйвера всех ближайших принтеров (если не запрещено подключаться напрямую к принтеру, без принт-сервера)?

Так все это и так делается, о чем я написал выше. Возможны другие случаи когда нужен оказыватся другой принтер.

Почему не кинуть скрипт в автозагрузку, который будет подключать все принтера филиала при логоне (если кол-во принтеров в филиале не чрезмерное; чужие можно отсеивать по маске сети)?

А вы представьте это все дело в организации размером больше 2к человек, с большой текучкой сотрудников, ротациями, часто принтеры меняются местами и меняются IP, часто принтеры портятся и отправляются в сервис, закончился тонер, еще что-то и т.д и т.п (причин «миллион»)… с сотнями принтеров....(GPO не предлагать)

Если уж заставили делать свою работу пользователей — чем ДЛЯ ПОЛЬЗОВАТЕЛЕЙ ваше решение лучше просто списка расшаренных принтеров в нативном интерфейсе ОС (если ОС не древняя — набрать в ПУСКе «принтер», выбрать «Добавить принтер», клик на принтере и выбрать «Добавить/Подключиться»)? Если не хочется видеть принтера других филиалов, можно на файловой шаре создать для филиалов папки и в них накидать установочные ярлыки (примерно как писали тут). Это УЖЕ работает, поэтому выше я написал, что «проблема» решена не оптимальным способом (хотя автор частенько упоминает минимализм).

Так это тоже все есть. Но опыт показал, что пользователю открыть и найти нужный принтер с браузера с удобным поиском и разделением «по полочкам» гораздо легче, чем в куче из сотен принтеров. Технически — разницы нет. Чисто психологический фактор.
Спасибо за ответы!

В статьях, действительно, отсутствовали детали — что хотя бы один принтер у пользователя уже настроен, а PrintDesk нужен для подключения дополнительного; что

Про «оставить на потом» Linux/MacOS — уже сейчас, без модификации архитектуры ничего не заработает, поскольку скрипт всего один. Вроде в прошлой версии у вас упоминалась возможность запускать три разных скрипта

Про первую проблему — «как сделать так, чтобы страницу возможно было бы открыть только по его относительному пути (например /home), а не открывая JSP файл (например Home.jsp) непосредственно» — я назвал её оффтопиком из-за того, что это тонкости JAVA, не связанные с темой администрирования принтеров. Как если бы вы в первой статье начали рассуждать об одинарных vs двойных кавычках в PHP. Вроде и нужно… но зачем?

четвертая — решена только для одного случая (PrintDesk развернут на принт-сервере) из… скольки?

Ну, а кто мешает ставить ее на много разных принт серверов, если они есть? Поставил, настроил и все. Правда смысла в этом тоже не вижу. Одной установки достаточно, как мне кажется.

Тут есть и моя вина, не совсем удачно сформулировал. Слова «из скольки?» относятся к тексту перед скобками, полностью звучит так «четвертая — решена только для одного случая из… скольки?» Как минимум, случаев ещё два:
— PrintDesk установлен НЕ на принт-сервер
— принт-сервер вообще не используется
оба решаемые, конечно

Я вообще не считаю, что админ чуть-что должен создавать GPO шки. Конечно я понимаю, что предназначение GPO как раз таки для облегчения задач админу

Ну да, конечно, лучше написать своё решение, чем использовать то, что уже есть в AD ))
Но, учитывая, что описываемое решение нужно только для доп.принтеров (можно сказать, «хотелок пользователя»), то уже неважно.

А вы представьте это все дело в организации размером больше 2к человек, с большой текучкой сотрудников, ротациями, часто принтеры меняются местами и меняются IP, часто принтеры портятся и отправляются в сервис, закончился тонер, еще что-то и т.д и т.п (причин «миллион»)… с сотнями принтеров....(GPO не предлагать)

С 2k человек не представляю. Зато представляю c 50 пользователями, с 5000 и >10000.
Чем меньше организация — тем больше может оказаться загонов у пользователей. В больших организациях всего перечисленного не было:
Принтер сломался — заменили на новый, поставив ему ip старого. Если вендор тот же — даже драйвера можно не менять.
Сломался и нечем заменить — для этого при первичной настройке/переезде добавляем все принтера в кабинете/на этаже/в филиале (по ситуации), дав им соответствующие имена. Когда один вышел из строя (даже просто замятие), пользователи просто печатают на следующий из списка.
Поменяли принтер местами — ну ip-адреса тоже поменяли, пользователь ничего не заметит.
За счёт того, что вместо принтсервера подключаемся напрямую к принтеру, ротация персонала вообще не колышет — у любого нового сотрудника уже будут подключены принтеры.
Аномалии бывают только в случаях «особенных принтеров» (например, все принтера — монохромные A4, но есть один цветной и один, умеющий печатать A3; или все просто принтера — но есть один МФУ, но там другие решения)

ToDo: поизучайте web-интерфейс своих принтеров. Нормальные сетевые принтеры умеют сохранять/показывать свои имя/местоположение, это можно считывать программно (не уверен, как там насчёт кроссвендорства(?) ), зачастую там же можно посмотреть уровень тонера/ошибку, чтобы «предвидеть» необходимость замены картриджа.
Спасибо автору за его труд и интересный пост. Заставили вспомнить свою молодость.

Я когда то администрировал принт-сервер и отвечал за более чем 250 разных принтеров на 3000 конечных пользователей в одном офисе, плюс филиалы в других странах.

С учетом своего опыта скажу что этот продукт не подходить для инфраструктуры enterprise уровня:
  • бюрократие при внедрении: разрешение на установку веб-сервера на принт-сервере, доступ внедоменных машин и тд. и тп.
  • много телодвижение для пользователя — открыть браузер, зайти на портал, выбрать филиал, выбрать принтер, начать установку драйвера(плюс другие возможные проблемы в этой цепочке). В коде видел скрипты для работы с принт-сервисом, в доменной машине он запросит админ права для работы с ним.

    При обычном подходе AD/GPO и при правильном именовании принтеров: открыть принт-сервер в проводнике, подключить выбранный принтер двойным нажатием.


При Вашем подходе наоборот все усложняется.

Тем более отдельный принтер для каждого физического принтера на принт сервере это старый подход — сейчас все делаеться с одним виртуальным принтером. А пользователь может распечатать с любого принтера используя свою карту пропуска для доступа к печати/сканирования(требуеться принтеры с соответствующей поддержкой).

Будет интересно, если напишите что нибудь для мониторинга состояний принтеров по sntp.
Я работал с программой от HP для управления сетевыми принтерами, но у него нет возможности создать онлайн дашборд.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории