( Вход | Регистрация | Поиск )

Мониторинг печати в организации, Программирование
Дата обновления: 14.03.2018 - 13:24, перейти к новому сообщению

·Anthony
Группа: Наши Люди

Сообщений: 799
Существует задача по сбору информации в организации о том кто сколько печатает.
Собственно есть два метода сбора информации:
а) Сбор информации непосредственно с принтеров
б) Сбор информации с компьютеров через WMI
* перехват заданий на печать сразу отмели
Выбран второй способ. Написана прога. Клиентская часть поставлена на компьютеры пользователей, которая отправляет информацию в определённую БД на SQL-сервер в сети.
Всё вроде хорошо, но.....
В сети несколько одинаковых принтеров. А идентификация идёт по наименованию (pPrinterName). HP LaserJet Pro M501n, к примеру. Как понять на какой именно принтер прошла печать?
Нужен какой-то уникальный параметр. Mac-адрес или имя хоста.
Параметры для сбора информации взяты отсюда:
хттп://msdn.microsoft.com/en-us/library/windows/desktop/dd162864(v=vs.85).aspx

Однако я не нашёл там ничего о mac-адресе или имени хоста.

Но и это не всё. Ведь у пользователей может стоять USB-принтер. А если таких принтеров много? HP P1005, к примеру. А если некоторые принтеры расшарены? Тут вообще непонятно есть ли у USB-принтеров какой-то уникальный идентификатор.

Сообщение отредактировал Anthony - 26.02.2018 - 14:49


Ответов(1 - 9)

Henry723
Группа: СуперМодераторы

Сообщений: 29.342
На сколько я понял, нужен контроль за пользователями...

По моему мнению, нужно разбить задачу на две:

1. Каждому пользователю присвоить свой номер-идентификатор (отдел кадров + it отдел), который
можно добавить, например, в пароль, учетную запись и т.д.

2. Если написанную уже программу можно исправить с помощью разработчика, то в нее нужно добавить модуль добавления пользователя и исключения оттуда.

3. Далее, в принтерах типа HP LaserJet Pro M501n есть возможность добавления администратором
пользователей под свой пароль(идентификатор) и получение большой статистики по каждому пользователю.

4. Настольные принтера типа HP P1005 таким механизмом не обладают, но и объем печати там совершенно минимальный - можно либо его игнорировать , либо убрать общий доступ и тогда за объем печати будет отвечать локальный пользователь к компу которого он и подключен.

5. Если такие раскладки невозможны по каким-либо причинам, можно купить готовое решение
типа, например, такого

Вариантов несколько как и несколько аналогичных программ.

6. Для более правильного варианта нужна доп. информация - сеть, домен, сервер, количество компов и пользователей, ну и т.д. Просто есть еще Linux решения помимо windows.

Как-то так...



·Anthony
Группа: Наши Люди

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

pStatus (отображается если статус печати - завершено), Computer (имя компа), UserName (на одном компе может быть несколько учёток), pPrinterName (имя принтера, но у разных пользователей один и тот же принтер может называться по разному), DocumentName (название файла, который был напечатан), PageCount (Собственно это кол-во страниц в документе), BytesPrinted (вес документа), WDate (время на момент печати) и ещё несколько параметров.

Речь не о том чтобы идентифицировать пользователей, а в том чтобы идентифицировать принтеры.
Нужно найти параметры в этом самом WMI, которые бы указывали на определённый уникальный параметр при печати. Параметр самого принтера. pPrinterName в этом плане недостаточен.


Henry723
Группа: СуперМодераторы

Сообщений: 29.342
В таком случае идентефикатором принтера может быть только пара MAC адрес - IP адрес и задать это можно как на принтере так и на сервере...

Только это не поможет определить кто из пользователей сколько напечатал...


·kostya-chist
Группа: Модераторы

Сообщений: 1.211
Если это сетевой принтер, то может помочь параметр "порт принтера", в описании WMI есть 2 похожих параметра.


·Anthony
Группа: Наши Люди

Сообщений: 799
Цитата | Quote(kostya-chist @ 27.02.2018 - 22:31)
в описании WMI есть 2 похожих параметра.


Какие, если не секрет?


·Anthony
Группа: Наши Люди

Сообщений: 799
Как мне заставить программу (Delphi) найти в windows этот самый порт принтера?
В каком месте он "сидит"?
Ведь сетевой принтер подключается не обязательно по порту типа 192.168.xxx.xxx
Он ведь и по имени может быть подключён.
Твой софтовый форум

Цитата | Quote(Henry723 @ 27.02.2018 - 17:13)
Только это не поможет определить кто из пользователей сколько напечатал...


Как раз поможет.....
На каждом компе установлена программа. Она предоставляет в общую БД информацию в том числе и ID процесса. У каждого компа свой ID вне зависимости от того какой на нём пользователь. У каждого пользователя компьютера тоже свой пользовательский ID. Я уже вижу кто и сколько печатает.

Просто при отображении конечной диаграммы получается путаница.....

С одной стороны пользователь с ID367p (комп ID12c), к примеру, напечатал за месяц 300страниц на принтер HP LaserJet Pro M501n, а другой пользователь этого же компа ID12c напечатал 200страниц на принтер HP LaserJet Pro M501n PCL6. Третий пользователь ID68p (комп ID17c), к примеру, напечатал 800страниц на принтер HP M501. Хотя по сути - это может быть один и тот же принтер.

С другой стороны эти или другие пользователи могли напечатать 1000страниц на принтер HP LaserJet Pro M521dn PCL6, хотя принтеры могут быть по сути разными.

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

Сообщение отредактировал Anthony - 5.03.2018 - 10:42


Henry723
Группа: СуперМодераторы

Сообщений: 29.342
Насколько я понимаю, принтеров все-таки меньше, чем пользователей, поэтому проще выводить статистику с принтеров - там есть общий счетчик сделанных отпечатков и смотреть кто сколько напечатал скажем за сутки...
Порт, к которому подключен принтер, один и он не меняется произвольно в зависимости от пользователя - соответственно, зачем подключать по имени порта ?


·Anthony
Группа: Наши Люди

Сообщений: 799
Цитата | Quote(Henry723 @ 5.03.2018 - 16:05)
Насколько я понимаю, принтеров все-таки меньше, чем пользователей, поэтому проще выводить статистику с принтеров - там есть общий счетчик сделанных отпечатков и смотреть кто сколько напечатал скажем за сутки...

Может и так, но по уже выбран пункт №2 из первого поста и возвращаться к нему не будем. Тем более что там свои проблемы. Средствами SNMP можно взять инфу, но для этого надо сперва знать IP-адрес. А программа должна в итоге быть универсальной, не привязанной к определённой сети.

Цитата | Quote(Henry723 @ 5.03.2018 - 16:05)
Порт, к которому подключен принтер, один и он не меняется произвольно в зависимости от пользователя - соответственно, зачем подключать по имени порта ?


Не понял вопроса. Подключаться по имени порта никто никуда не собирается.
Мне всего то и надо что средствами WMI взять из Windows это имя порта. Т.е. нужно просто название параметра в WMI, если он конечно есть.
Только вот есть вопрос сопутствующий....
Как видно из скрина в предыдущем посте есть два параметра:
  • Port Name
  • Print Name or IP Address
Как можно понять параметр Port Name в свойствах порта имеет специфический, но ИМХО не уникальных характер в данном случае. Если указан IP-адрес, но там ещё куда ни шло..
А вот Print Name or IP Address - это как раз то что нужно.

.


Henry723
Группа: СуперМодераторы

Сообщений: 29.342
А присвоить постоянный IP адрес в качестве имени разве нельзя ?

Еще посмотри тут например


У меня на паре сетевых принтеров стоят счетчики на каждого пользователя, еще там же можно задать еще и лимит печати...