#1 Por Alcarohtar 16/06/2011 - 09:37
Bom Dia,
Tenho em meu ambiente servidores com SO 2003 e 2008 R2. Minha empresa solicitou uma forma de podermos monitorar as impressões dos usuários, devido ao alto uso de papel.
Na matriz, o servidor de impressão é um 2003 EN, e nele consegui gerar um relatório usando o script abaixo. Ele captura os dados diretamente do log do Windows (dados com ID = 10).
Estes dados são gravados depois em um banco SQL também na matriz. Existe uma bat programada para rodar este script toda madrugada, pois ele só pega as impressões do dia anterior.
O problema é que não consigo fazer rodar em um 2008 PT, que está em uma unidade em SP. Ele termina de rodar o script muito rapidamente. Não sei se ele não captura os logs, se ele não grava no banco(ou não enxerga) ou o que acontece, não me retorna nenhum erro.
Qualquer ajuda é bem vinda. Abaixo o script.
O comando para rodá-lo é: cscript nomeelocaldoscript /srv:nomedoservidordeimpressao
'==========================================================
'
' LANG : VBScript
' NAME : event10.vbs
' AUTHOR : Fábio de Paula Junior(fabiopjr@gmail.com)
' DATE : 11/01/2005
' Description : Recupera e grava eventos de logs id=10
'
' COMMENT :
' LINKS:
'
' KEYWORDS : Logs Print Impressao
'==========================================================
'Argumentos
If WScript.Arguments.Named.Exists("?") then sobre
If WScript.Arguments.Named.Exists("srv")=0 then sobre
If WScript.Arguments.Named.Exists("dt")=0 then
DateToCheck = date - 1
else
DateToCheck = cdate(WScript.Arguments.Named("dt"))
if not isdate(DateToCheck) then sobre
end if
If WScript.Arguments.Named.Exists("dtf") then
DateToCheckFinal=cdate(WScript.Arguments.Named("dtf"))
else
DateToCheckFinal=DateToCheck
end if
debug = WScript.Arguments.Named.Exists("debug")
Dim prnMsg,prnServidor,prnImpressora,prnUser,prnQtd,debug
strComputer=WScript.Arguments.Named("srv")
'Variaveis de Configuração +++++++++++
varLocal=0 '0-EUA 1-Brasil ainda não está implementado o Brasil
varownedby=array(" owned by "," teste")
varLen_ownedby=len(varownedby(varLocal))
varwasPrinted=array(" was printed on "," teste")
varLen_wasPrinted=len(varwasPrinted(varLocal))
'+++++++++++++++++++++++++++++++++++++++
strServer="crmqas"
strBanco="print"
if NOT DEBUG then
Set objConnSQL = CreateObject("ADODB.Connection")
Set objRS = CreateObject("ADODB.Recordset")
objConnSQL.Open _
"Provider=SQLOLEDB;Server=crmqas;Database=print;User Id=printreport;Pwd=Cargoreport;Packet Size=4096;Trusted_Connection=no"
' objRS.Open "SELECT * FROM controle_impressao", _
' objConnSQL, adOpenKeyset, adLockOptimistic
end if
Set dtmStartDate = CreateObject("WbemScripting.SWbemDateTime")
Set dtmEndDate = CreateObject("WbemScripting.SWbemDateTime")
dtmEndDate.SetVarDate DateAdd("s",86399,DateToCheckFinal), True
dtmStartDate.SetVarDate DateToCheck, True
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colEvents = objWMIService.ExecQuery _
("Select * from Win32_NTLogEvent Where (TimeWritten >= '" _
& dtmStartDate & "' and TimeWritten < '" & dtmEndDate & "') AND (EventCode=10) AND (SourceName='Print')")
on error resume next
For each objEvent in colEvents
'--------------------------
' Interpreta Msg
'--------------------------
prnServidor= objEvent.ComputerName
prnMsg=objEvent.Message
s0=instr(1,prnMsg,",")+2
s1=instr(1,prnMsg,varownedby(varLocal))
prnDoc=mid(prnMsg,s0,s1-s0)
s0= instr(1,prnMsg,varownedby(varLocal)) + varLen_ownedby
s1=instr(s0,prnMsg," ") 'instr(1,prnMsg(1)," was printed on ")
prnUser=mid(prnMsg,s0,s1-s0)
s0=s1+varLen_wasPrinted
s1=instr(s0,prnMsg," via port ")
prnImpressora=mid(prnMsg,s0,s1-s0)
s0=instrrev(prnMsg,":")
prnQtd=cint(mid(prnMsg,s0+1))
prnDt=cdate(mid(objEvent.TimeWritten,7,2) & "/" & mid(objEvent.TimeWritten,5,2) & "/" & mid(objEvent.TimeWritten,1,4))
if debug then
wscript.echo prnservidor & ";" & prnImpressora & ";" & prnUser & ";" & prnQtd & ";" & prnDoc & ";" & prnDt
else
'--------------------------
' Grava no banco de dados
'--------------------------
'objRS.AddNew
'objRS("nome_asset") = prnServidor
'objRS("impressora") = prnImpressora
'objRS("usuario") = prnUser
'objRS("documento") = prnDoc
'objRs("data") = prnDt
'objRS("quantidade") = prnQtd
'objRS.Update
objConnSQL.Execute( " insert into controle_impressao ( nome_asset, impressora, usuario, data, quantidade, documento ) values ( '" & prnServidor & "', '" & prnImpressora & "', '" & prnUser & "', '" & prnDt & "', " & prnQtd & ", '" & prnDoc & "' )" )
end if
Next
objRS.Close
objConnSQL.Close
wscript.echo debug
Sub sobre()
wscript.echo "FABIO DE PAULA JUNIOR - 2005"
wscript.echo
wscript.echo wscript.scriptname & " /srv: [/dt: [/dtf:]] [/debug]"
wscript.quit
end sub