Trabalhando com logs de eventos Powershell
Introdução
As vezes nossos scripts precisão controlar os erros que o sistema pode apresentar, seja para um relatório ou para procurar um erro especifico no sistema, para isso podemos utilizar o cmdlet Get-EventLog.
Também podemos querer que nossos scripts gravem logs no sistema para podemos verificar o que ocorreu posteriormente e facilitar o debug.
Coletando Logs
Para coletarmos logs utilizamos o cmdlet Get-EventLog, podemos determinar diversos filtros, como período de tempo, tipo de log e source do log.
Começando então do básico, vamos listar alguns eventos.
Get-EventLog -LogName "Application"
Esse comando nos lista todos os logs do Application, podemos listar os logs de security, setup ou que seja...
Digamos que queremos somente os últimos 10 logs, então utilizamos o parâmetro Newest, como no exemplo a baixo
Get-EventLog -LogName "Application" -Newest 10
Ok, porém isso nos traz muitos logs de informação e nós queremos saber dos erros!
utilizamos então o parâmetro Entrytype.
Get-EventLog -LogName "Application" -Newest 10 -EntryType "Error"
Ok, porém eu queria somente os erros gerados por uma aplicação especifica, por exemplo MySQL, então podemos tentar isto:
Get-EventLog -LogName "Application" -Newest 10 -EntryType "Error" -Source "MySQL"
Ok, porém essas datas não me servem, pois os últimos 10 novos igual estão muito antigos, eu quero saber se nos últimos 10 minutos tivemos algum log.
Get-EventLog -LogName "Application" -After ((Get-Date).AddMinutes(-10))
Ok, porém meu chefe mudou de ideia e agora quer os logs do ultimo dia.
Get-EventLog -LogName "Application" -After ((Get-Date).AddDays(-1))
Ok, ok, mas meu chefe falou agora que entre o meio dia e as 13 de ontem ocorreu um erro e ele quer ver os logs.
Get-EventLog -LogName "Application" -After ((Get-Date 12:00).AddDays(-1)) -Before ((Get-Date 13:00).AddDays(-1))
Ok, mas agora eu não entendi nada!
Vamos lah, utilizamos o Get-Date para pegar a data do dia de hoje informando que queríamos as 12 horas, depois utilizamos o método AddDays para reduzir um dia da data e definimos essa data como parâmetro para o After ( Depois ).
Após isso pegamos novamente a data de hoje com get-date, informamos que queríamos as 13 horas, novamente utilizamos o método AddDays para reduzir um dia e passamos esse valor para a propriedade Before ( Antes ).
Temos que o parâmetro After (Depois) ficou com valor do dia de ontem as 12 horas e o parâmetro Before (Antes) ficou com a data de ontem as 13 horas, sendo assim temos os logs de ontem no período das 12 as 13.
você pode especificar uma data direta utilizando o get-date também.
Get-EventLog -LogName "Application" -After (Get-Date "13/10/2012 12:00") -Before (Get-Date "13/10/2012 13:00")
Acho que já chega de lermos logs, vamos cria-los!
Criando Logs
Ao criarmos logs durante as etapas dos nossos scripts e em casos de erros podem salvar nossas vidas em algumas situações.
Nessa parte do artigo veremos a arte de criar logs utilizando Powershell, para isso utilizamos o cmdlet New-EventLog e o Write-EventLog.
Quais as etapas?
Primeiro utilizamos o New-EventLog para criarmos um Source de evento para nossa aplicação podendo criar também uma categoria de log separada (para que o log não fique na Application e sim em uma estrutura separada só para nossos scripts ).
Começando com básico, queremos criar um Source chamando Script Louco, nos logs de Application.
New-EventLog -Source "Script Louco" -LogName Application
Pronto, agora quando mandarmos escrever nossos logs com o Write-EventLog utilizaremos o source "Script Louco".
Write-EventLog -LogName Application -Source "Script Louco" -EntryType "Error" -EventId 666 -Message "Erro no Script Louco!!!"
Simples, agora colocamos esse código em nosso script e ele vai escrever os logs! caso não queira um log de erro mas de informação somente troque o EntryType para Information, Warning ...
Se quisermos deixar as coisas um pouco mais organizadas e mantermos nossos logs em um Log diferente do Application fazemos o seguinte, utilizamos o New-EventLog para cria um novo tipo de log.
New-EventLog -Source "Scripting" -LogName "Log dos Meus Scripts"
Agora se abrirmos o event viewer veremos a baixo de "Applications and Services Logs" nosso Log personalizado, agora é só referenciarmos ele na hora de escrevermos o log.
Write-EventLog -LogName "Log dos Meus Scripts" -Source "Scripting" -EntryType "Error" -EventId 666 -Message "Erro no Script Louco!!!"
Referencias
Esse artigo foi escrito utilizando como fonte a documentação disponível no powershell.
Matheus Kamphorst | Blog: http://howtoserver.com