Комментарии 20
познавательно.
Только малая поправка «у Ricoh страницы были активными» — наверное «динамическими».
Только малая поправка «у Ricoh страницы были активными» — наверное «динамическими».
+1
НЛО прилетело и опубликовало эту надпись здесь
Не пробовали применять HP Web Jetadmin?
+1
Пробовали. Тогда это, кажется, называлось как-то иначе.
Там все красиво и здорово, но нам не подошло по трем причинам:
— тогда там не было автоматического режима, оно не работало как сервис. нельзя было один раз настроить и забыть.
— оно показывало много интересного, но нельзя было выдавать данные куда то в стороннее приложение, «для анализу».
— у нас немалое количество не-НР принтеров, а хотелось чтобы решение было универсальное. Скрипт этому требованию полностью удовлетворил.
Там все красиво и здорово, но нам не подошло по трем причинам:
— тогда там не было автоматического режима, оно не работало как сервис. нельзя было один раз настроить и забыть.
— оно показывало много интересного, но нельзя было выдавать данные куда то в стороннее приложение, «для анализу».
— у нас немалое количество не-НР принтеров, а хотелось чтобы решение было универсальное. Скрипт этому требованию полностью удовлетворил.
0
Посмотрел более внимательно. Либо это ПО сильно развилось за последние 3 года, либо мы тогда пробовали что-то другое.
0
Как бы сказали на одном известном ресурсе. Автор жжет, пиши еще.
Полезно читать про такие мелочи.
Полезно читать про такие мелочи.
0
По опыту предполагаю, что скоро появится следующий запрос от печатников — статистика по тому: кто, что и когда печатал. И вот тут так просто вопрос не закрыть :(
+1
Это бывает. И в принципе все можно вытащить из логов Windows (традиционно принтера подключены через принт-сервера, т.е. есть единая точка сбора логов).
Но автоматизированного способа предложить не могу, т.к. на моем веку это было от силы несколько раз и каждый раз делалось тупо вручную: вытаскивались логи, загонялись в Excel, парсились на предмет нужного пользователя и т.д.
Наверняка есть всевозможный платный софт который эту задачу решает. На то он и платный софт.
Но автоматизированного способа предложить не могу, т.к. на моем веку это было от силы несколько раз и каждый раз делалось тупо вручную: вытаскивались логи, загонялись в Excel, парсились на предмет нужного пользователя и т.д.
Наверняка есть всевозможный платный софт который эту задачу решает. На то он и платный софт.
0
именно. потмучто руководство, которое не просто собирает, а уже анализирует,
тутже решит расписывать затраты на бумагу по подразделениям пропорционально расходу.
и весь SNMP снова уходит в историю.
тутже решит расписывать затраты на бумагу по подразделениям пропорционально расходу.
и весь SNMP снова уходит в историю.
+1
А как насчет сбора сразу в CSV file? Тоже по дефолту открывается экселем — и при этом пропускается этап макроса :)
0
У меня ситуция другая. Принтеры все сетевые, но установлены на одном сервере, а пользователям шарятся как сетевой ресурс, причем насовываются политикой. То есть печатают все через один сервер.
Возникала задача подсчитать не просто сколько печатают. а кто именно сколько печатает. В решении этой задачи SNMP не поможет, по крайней мере не очень представляю как.
В итоге воспользовался тем, что Windows Server каждый чих — пишет в лог. Вообще связка PowerShell + EventLog дает очень много возможностей разных по сбору статичтики и агрегации информации.
Далее приведу скриптик, который агрегирует информацию из системного лога сервера печати и строит статистику по пользователям. Если таких серверов больше одного, то не фокус модифицировать скрипт, для сбора логов с нескольких серверов. Также можно агрегировать логи еще и с машин пользователей, но Spooler на десктопных версиях Window по-умолчанию использует более низкий уровень логирования и не пишет в лог события удачной распечатки. Повысить его можно насунув политикой некий ключ реестра (не помню какой именно за давностью, но легко нагуглить).
Сразу оговорюсь. Глубоко в Powershell не лазил, так что может можно и красивее реализовать. Делал как знаю или как догадался сам.
Если запускать скрипт на машине, на которой установлены расширения PowerShell для работы с AD, то можно еще по логинам и имена из AD выдергивать (Get-ADUser user1).name
Возникала задача подсчитать не просто сколько печатают. а кто именно сколько печатает. В решении этой задачи SNMP не поможет, по крайней мере не очень представляю как.
В итоге воспользовался тем, что Windows Server каждый чих — пишет в лог. Вообще связка PowerShell + EventLog дает очень много возможностей разных по сбору статичтики и агрегации информации.
Далее приведу скриптик, который агрегирует информацию из системного лога сервера печати и строит статистику по пользователям. Если таких серверов больше одного, то не фокус модифицировать скрипт, для сбора логов с нескольких серверов. Также можно агрегировать логи еще и с машин пользователей, но Spooler на десктопных версиях Window по-умолчанию использует более низкий уровень логирования и не пишет в лог события удачной распечатки. Повысить его можно насунув политикой некий ключ реестра (не помню какой именно за давностью, но легко нагуглить).
Сразу оговорюсь. Глубоко в Powershell не лазил, так что может можно и красивее реализовать. Делал как знаю или как догадался сам.
-------------------------------------------------------------------------------------
$tm1 = get-date 6:00 #ставим дату на 6:00 сегодня
$ev = Get-EventLog -ComputerName servername -LogName System -Source Print -InstanceId 1073741834 -after $tm1
$typedef = "public struct userCntr {public string usr; public int cnt;}" #Описываем структуру
Add-Type -TypeDefinition $typedef #создаем тип по описанию
$buf1 = New-Object userCntr;
$buf2 = New-Object userCntr;
$allusers = $buf1,$buf2 #не нашел более простого способа создать массив объектов. Лень было разбираться, как конструктор кастомный написать. Проще потом отфильтровать две пустые записи в начале массива, которые возникнут при таком его создании. Они никак не мешеют, только глаза мазолят
foreach ($el in $ev)
{
$buf3 = New-Object userCntr;
$buf3.usr = $el.replacementstrings[2];
$buf3.cnt = $el.replacementstrings[6];
$mrk = 0
for ($i=0; $i -lt $allusers.Length; $i++)
{
if ($allusers[$i].usr -eq $buf3.usr) {$allusers[$i].cnt += $buf3.cnt; $mrk = 1}
}
if ($mrk -ne 1) {$allusers += $buf3} else {$mrk = 0}
}
$allusers | ? {$_.usr -ne $buf1.usr} > ("C:\PrintStat\" + (get-date -UFormat "%d-%m-%Y") + ".txt") #фильтр нужен, чтобы убрать первые две пустые записи, которые возникают при создании массива объектов
-------------------------------------------------------------------------------------
Если запускать скрипт на машине, на которой установлены расширения PowerShell для работы с AD, то можно еще по логинам и имена из AD выдергивать (Get-ADUser user1).name
+2
Выше говорили, что логи Windows не учитывают количество копий. т.е. если вы пошлете один документ на 1 страницу, в количестве 1000 копий, то Windows в лог запишет что был послан один документ на 1 страницу, и не запишет что на самом деле было потреблено 1000 страниц.
У вас это учитывается?
У вас это учитывается?
0
Подскажите, скрипт вываливается с
что делаю не так?
Cannot index into a null array.
At line:14 char:36
+ $buf3.usr = $el.replacementstrings[ <<<< 2];
+ CategoryInfo : InvalidOperation: (2:Int32) [], RuntimeException
+ FullyQualifiedErrorId : NullArray
что делаю не так?
0
ошибка возникает потому, что в переменную $ev не загружено ни одного события.
Вариянтов два. Либо не верно указано имя сервера(компьютера) с которого нужно получть eventLog.
Либо нет ни одного нужного события. Если целевая ОС — не серверная. Нужно повышать уровень логирования. События успешной печати по-умолчанию включены только в серверных ОС-ях.
Попробуйте просто вывести список событий:
Скорее всего он будет пуст. Если будет пуст, попробуйте убрать ключ -after, чтобы вывести все.
Я тестил на WinServ2003R2 и 2008R2, работает. Когда выклдывал сам скрипт — немного его отредактировал (привел в божеский вид), но проверил перед тем как выкладывать.
Вариянтов два. Либо не верно указано имя сервера(компьютера) с которого нужно получть eventLog.
Либо нет ни одного нужного события. Если целевая ОС — не серверная. Нужно повышать уровень логирования. События успешной печати по-умолчанию включены только в серверных ОС-ях.
Попробуйте просто вывести список событий:
$tm1 = get-date 6:00 #ставим дату на 6:00 сегодня
Get-EventLog -ComputerName servername -LogName System -Source Print -InstanceId 1073741834 -after $tm1
Скорее всего он будет пуст. Если будет пуст, попробуйте убрать ключ -after, чтобы вывести все.
Я тестил на WinServ2003R2 и 2008R2, работает. Когда выклдывал сам скрипт — немного его отредактировал (привел в божеский вид), но проверил перед тем как выкладывать.
0
Делал подобное. Только в компании на тот момент уже стояла система мониторинга — Zabbix, про который не раз уже писали на Хабре. Так что принтеры по SNMP опрашивались раз в час занося данные не только о напечатанных страницах, но и количестве оставшегося тонера и т.д. (что например удобно для понимаю когда нужно менять картридж). Потом можно посмотреть графики в Zabbix-е и построить интересную статистику. У нас например больше всего печатали менеджеры и причем утром после прихода на работу (видимо договора для тех, кому вчера не отправили или договорились вечером) и ближе к вечеру. А по оставшемуся количеству тонера можно понять с какой периодичностью необходимо заказывать картриджи, чтобы они всегда были в наличии, но не захламляли склад.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Опытные мелочи-6, или «Учет и контроль печатника Ивана Федорова»