Cada administrador de sistema do Windows provavelmente está familiarizado com o Log de Eventos do Windows. Usar este cmdlet no PowerShell permite que os sysadmins analisem muitos eventos de uma só vez em vários computadores ao mesmo tempo. Isso libera os sysadmins de ficarem clicando no Visualizador de Eventos tentando descobrir o filtro certo a usar e determinar exatamente onde esse evento crítico está armazenado. No entanto, o Get-EventLog
tem suas desvantagens, como você verá.
Listando Logs de Eventos com o Get-EventLog
O cmdlet Get-EventLog
está disponível em todas as versões modernas do Windows PowerShell. Em seu uso mais simples, este cmdlet precisa de um log de eventos para consultar e, em seguida, exibirá todos os eventos nesse log de eventos.
Mas e se você não souber o nome do log de eventos em primeiro lugar? Nesse caso, precisamos descobrir todos os logs de eventos disponíveis em nosso computador local. Fazemos isso usando o comando Get-EventLog -List
.

Você pode ver que tenho alguns logs de eventos no meu sistema local agora, mas você pode estar se perguntando onde estão os outros? Existem dezenas de outros logs de eventos aparecendo em Logs de Aplicativos e Serviços no Visualizador de Eventos. Por que eles não estão aqui?
Se você precisa desses eventos, infelizmente, o Get-EventLog
não vai funcionar. Em vez disso, você precisará verificar o Get-WinEvent. O cmdlet Get-EventLog
poderia ser considerado um cmdlet legado neste ponto, mas ainda o uso com frequência simplesmente porque é tão fácil de usar.
Consultando Eventos com Get-EventLog
Agora que sabemos todos os registros de eventos disponíveis, podemos ler os eventos dentro desse registro de eventos. Talvez eu queira ver todos os eventos no registro de eventos do Aplicativo. Para obter esses eventos, preciso especificar o parâmetro LogName
com Get-EventLog
e o cmdlet irá obedecer retornando todos os eventos nesse registro de eventos.

Por padrão, você verá apenas seis propriedades na saída:
Índice
Tempo
Tipo de Entrada
Fonte
Id da Instância
Mensagem
Na realidade, Get-EventLog
retorna 16 delas. O motivo pelo qual você só vê seis é devido às regras de formatação do PowerShell que definem a saída. Abaixo está um exemplo da saída real encontrada ao canalizar Get-EventLog
para Select-Object
e selecionando todas as propriedades.

Filtrando com Get-EventLog
É provável que ao procurar eventos, não precisamos de todos os eventos. Em vez disso, só precisamos de alguns. Nesse caso, precisamos filtrar para eventos específicos. Get-EventLog
tem algumas maneiras diferentes de fazer isso. O cmdlet Get-EventLog
pode filtrar com base no carimbo de data/hora, tipo de entrada, ID do evento, mensagem, fonte e nome de usuário. Isso cuida da maioria das maneiras de encontrar eventos.
Para demonstrar filtragem, talvez eu esteja consultando eventos de tempos em tempos e queira encontrar os dez eventos mais recentes. Nesse caso, posso usar o parâmetro Newest
e especificar quantos eventos gostaria de ver. Get-EventLog -LogName Application -Newest 10
retornará apenas os dez eventos mais recentes.
Talvez eu queira encontrar todos os eventos após um ponto específico no tempo. Para isso, temos o parâmetro After
. O parâmetro After
recebe uma data/hora, então se eu quiser encontrar apenas os eventos dentro do log de Aplicativos que ocorreram após 26/01/19 10:17, eu poderia fazer isso Get-EventLog -LogName Application -After '26/01/19 10:17'
. Também podemos realizar o mesmo processo, mas selecionar eventos que ocorreram antes de uma determinada data com, você deve ter adivinhado, o parâmetro Before
.
O Get-EventLog
tem muitas maneiras diferentes de filtrar, não incluindo com base em um carimbo de data/hora. Também podemos filtrar eventos com base em outros atributos como ID do evento (ID da instância) e mensagem, que tendem a ser atributos comuns para pesquisar. Talvez eu saiba que estou procurando um evento com ID 916; passaríamos 916 para o parâmetro InstanceId
.
Também podemos combinar filtros. Talvez eu receba muitos eventos retornados com um ID de 916, mas queira esses eventos com a sequência svchost na mensagem. Nesse caso, podemos adicionar o parâmetro Message
ao Get-EventLog
e especificar um caractere curinga como svchost.
Script de bônus!
Você precisa de um ótimo exemplo de como usar o Get-EventLog em um script do mundo real? Se sim, você está com sorte! Abaixo está um caso de uso avançado do Get-EventLog
que você pode baixar e usar hoje!
Resumo
O cmdlet Get-EventLog
é um ótimo comando para usar se você precisar consultar rapidamente um dos logs de eventos comuns. É fácil de usar e fornece alguma capacidade básica de filtragem. No entanto, se você precisar fazer uma investigação mais aprofundada nos logs de eventos, o comando Get-WinEvent
provavelmente funcionará melhor, mas é um pouco mais difícil de usar e às vezes requer o conhecimento de sintaxe como XPath.