Твой софтовый форум > Тематические форумы > Программирование

Мониторинг печати в организации

Дата публикации: 14.03.2018 - 13:24
Pages: 1, 2
kostya-chist
Цитата | Quote(Anthony @ 5.03.2018 - 18:26)
Средствами SNMP можно взять инфу, но для этого надо сперва знать IP-адрес.

В чём проблема получить IP адрес по имени принтера?
Если используется DHCP - запрос по имени выдаст IP, если статические адреса - значит нужна отдельная база, к которой программа сможет обращаться.
Anthony
Цитата | Quote(Henry723 @ 5.03.2018 - 20:21)
А присвоить постоянный IP адрес в качестве имени разве нельзя ?
*

Можно, только программа этого не делает. Это делает сисадмин.
А принцип программы заключается в том, чтобы собрать инфу вне зависимости от того если ли этот сисадмин или его нет. Я ж говорю... речь идёт не о конкретной сети, а о любой. В которой могут быть в теории разные принтеры с разными наименованиями или с одинаковыми. Где в наименовании порта может быть что угодно.

Цитата | Quote(kostya-chist @ 5.03.2018 - 21:44)
В чём проблема получить IP адрес по имени принтера?
Если используется DHCP - запрос по имени выдаст IP, если статические адреса - значит нужна отдельная база, к которой программа сможет обращаться.
*

Программа не знает логику сети. Есть там DHCP или нет, это не её дело.
Запрос по имени принтера для получения IP адреса - это здорово.
Но:
а) о каком имени принтера идёт речь? (выделено разными цветами)
Твой софтовый форум
б) программа делает запрос API по имени (синий цвет) и получает отказ разумеется.
Anthony
Чтобы было понятнее... в PowerShell:
Code
# Collect port names and host addresses into hash table
$hostAddresses = @{}
Get-WmiObject Win32_TCPIPPrinterPort | ForEach-Object {
 $hostAddresses.Add($_.Name, $_.HostAddress)
}

Get-WmiObject Win32_Printer | ForEach-Object {
 New-Object PSObject -Property @{
   "Name" = $_.Name
   "DriverName" = $_.DriverName
   "HostAddress" = $hostAddresses[$_.PortName]
 }
}

Даёт мне
DriverName: HP LaserJet Pro MFP M521 PCL 6 (красным выделено)
Name: HP M521dn (синим выделено)
HostAddress: *пусто*
Твой софтовый форум

Code
get-wmiobject win32_printer |
ForEach-Object{ $port = $_.GetRelated('win32_tcpipprinterport').hostaddress
 $_ | Add-Member NoteProperty PortIPAddress $port -PassThru
}|
select Name, ShareName, PortIPAddress

даёт мне
Name: HP M521dn (тот же самый синим выделено)
ShareName: HP M521dn1 (это если я принтер расшарю)
PortIPAddress: *пусто*

Так вот какой мне код нужен чтобы из этого Win32_TCPIPPrinterPort выцепить эти PortIPAddress и HostAddress??
Henry723
IP адрес присутствует на вкладке Порты на данном рисунке...
Их присваивает DHCP или он прописан статически...
В качестве основного признака там MAC адрес каждого принтера...
Если сделать постоянные IP адреса на каждом принтере и сохранить, то нужно просто доработать программу чтобы она брала IP адрес из вкладки Порты и потом находила нужный принтер по заранее сохраненной таблице...

Квалифицированному программисту по моему можно сделать легко...

Или я чего-то тупо не понимаю ?
Anthony
Цитата | Quote(Henry723 @ 13.03.2018 - 19:34)
IP адрес присутствует на вкладке Порты на данном рисунке...
Их присваивает DHCP или он прописан статически...
В качестве основного признака там MAC адрес каждого принтера...
Если сделать постоянные IP адреса на каждом принтере и сохранить, то нужно просто доработать программу чтобы она брала IP адрес из вкладки Порты и потом находила нужный принтер по заранее сохраненной таблице...

Квалифицированному программисту по моему можно сделать легко...

Или я чего-то тупо не понимаю ?
*


На вкладке "Порты" из поста #12 видно что там необязательно присутствует IP. Более того, в подавляющем большинстве случаев это норма. Все современные принтеры ставятся с фирменного ПО, которое прописывает в наименование порта что угодно, только не IP.

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

Задумка такая..... даю всего один файлик для сети. Этот файл раскидывается по всем компам и прописывается в автозагрузку. Далее он создаёт процесс сбора информации с компа и передачу её на сервер SQL. Разумеется предварительно мне дают данные для этого SQL-сервера (Имя сервера, Имя БД, логин, пароль), эти данные вносятся в файл. Таким образом для каждой локальной сети свой уникальный файл.
Pages: 1, 2


Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке: Мониторинг печати в организации
SoftoRooM © 2004-2024