Conforme pôde ser visto no post anterior, configuramos a auditoria no equipamento que atuará como servidor de impressão. Agora, precisamos consultar de alguma maneira as impressões realizadas.
Como as impressões são realizadas e registradas no log de eventos do Windows, agora precisamos de um script exportar o log, já que a exportação padrão do visualizador de eventos não nos fornece os dados principais da impressão (o que foi impresso, tamanho do trabalho de impressão e quantas páginas).
Continuar lendo...
Abaixo, anexo um script escrito em vbs (bem simples por sinal) que faz o trabalho para exportar para um arquivo texto no formato SQL. Confesso que este script não é dos melhores (faltou um pouco de tempo para melhorá-lo e ficar mais eficiente).
O script se conecta através de WMI para acessar os logs. A sintaxe da pesquisa é parecida com SQL e chama-se WQL (WMI Query Language).
---8<--- strComputer = "."
dim dtmData
dtmData = dateadd("d", -1, date())
strDataPesquisa = year(dtmData) & Right("0" & month(dtmData), 2) & Right("0" & day(dtmData), 2)
rem wscript.echo strDataPesquisa
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_NTLogEvent " & _
"WHERE EventCode=10 and EventType=3 " ,,48)
set objFS = CreateObject("Scripting.FileSystemObject")
set objResultado = objFS.OpenTextFile("c:\windows\temp\logimpressoras.sql", 2, true)
For Each objItem in colItems
rem extrai a data e a hora.
strData = Left(objItem.TimeGenerated, 14)
strHora = Right(strData, 6)
strData = Left(strData, 8)
rem wscript.echo(strData)
if LTrim(RTrim(strData)) = Ltrim(RTrim(strDataPesquisa)) then
rem formata a data e hora
strData = Left(strData,4) & "-" & mid(strData, 5, 2) & "-" & Right(strData, 2)
strHora = Left(strHora, 2) & ":" & mid(strHora, 3, 2) & ":" & Right(strHora, 2)
strDtm = strData & " " & strHora
rem pega o tamanho da impressao e o numero de paginas
strSize = mid(objItem.Message, inStr(objItem.Message, "Size in bytes:"))
strSize = mid(strSize, inStr(strSize, ":")+1)
strPages = RTrim(LTrim(Mid(strSize, inStr(strSize, ":")+1)))
strSize = LTrim(RTrim(Left(strSize, inStr(strSize, ";") - 1)))
rem pega a identificacao do job
strJobNumber = LTrim(RTrim(Left(objItem.Message, inStr(objItem.Message, ",") - 1)))
rem pega o nome do trabalho de impressao
strJob = Mid(objItem.Message, inStr(objItem.Message, ",") + 1)
strOwner = Mid(objItem.Message, inStr(strJob, " owned by ")+12)
strJob = LTrim(RTrim(Left(strJob, inStr(strJob, " owned by ") - 1)))
rem trata apostrofos
strJob = replace(strJob, "'", "\'")
strPrinter = Mid(strOwner, inStr(strOwner, " was printed on ") + 16)
strPrinter = LTrim(RTrim(Left(strPrinter, inStr(strPrinter, " via port ") - 1)))
strOwner = Left(strOwner, inStr(strOwner, " was printed on ") - 1)
strOwner = LTrim(RTrim(Mid(strOwner, inStrRev(strOwner, " ") + 1)))
strSQL = "INSERT INTO tblImpressoes (strJob, strJobName, strProprietario, strImpressora, dtmImpressao, dblTamanho, dblPaginas) " & _
"VALUES ('" & strJobNumber & "', '" & strJob & "', '" & strOwner & "', '" & strPrinter & "', '" & strDtm & "', " & strSize & _
", " & strPages & ");" & chr(13) & chr(10)
objResultado.Write(strSQL)
end if
Next
objResultado.Close
set objResultado = nothing
set objFS = nothing
set colItems = nothing
set objWMIService = nothing
--->8---
Feito isto, bastou agendar a tarefa para ser executada uma vez ao dia para que o log fosse exportado para o arquivo texto.
No servidor onde armazeno os logs, fiz um script para baixar o arquivo e importá-lo na base de dados em MySQL, PostgreSQL, SQL Server, etc. A partir daí foi só efetuar a consulta da maneira que eu precisava, com agrupamentos, totais, somatórias e tudo mais.
Estas consultas podem ser feitas diretamente via planilha de cálculo ou desenvolver uma pequena página web para exibí-los.
Não é a melhor solução do mercado. Apesar de artesanal, resolve meu problema.
segunda-feira, 6 de abril de 2009
Pesquisando as impressões efetuadas através do seu servidor de impressão
Postado por Luis Fernando às 18:30
Marcadores: Banco de dados, HTML, Microsoft, MySQL, PHP, Programação, Servidor de Impressão, SQL Server, Windows
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário