O Windows possui vários registros de eventos diferentes, mas como você faz para recuperá-los rapidamente? O cmdlet Get-WinEvent
pode recuperar registros de eventos clássicos do Windows, como os registros do Sistema e de Aplicativos, logs gerados pela tecnologia Windows Event Log e até mesmo logs do Event Tracing for Windows (ETW)!
Neste artigo, aprenda como aproveitar o Get-WinEvent
para recuperar e filtrar eventos de registros de eventos!
Pré-requisitos
Para acompanhar, você só precisa de uma versão atual do Windows 10 e do PowerShell 5.1 ou superior. Este artigo está usando o Windows 10 e o PowerShell 7.1.
Listando Registros Disponíveis com Get-WinEvent
É difícil saber quais entradas de log você pode precisar sem conhecer todos os registros disponíveis. Com o Get-WinEvent
, você pode listar todos os registros disponíveis rapidamente usando o parâmetro -ListLog
. O valor do parâmetro *
indica ao Get-WinEvent
para listar todos os registros sem filtragem. Como mostrado abaixo, todos os registros são recuperados, mas apenas um conjunto limitado de propriedades é exibido usando o Select-Object
cmdlet.
Nem todos os registros são habilitados por padrão. Talvez seja necessário abrir o Visualizador de Eventos, localizar o registro e clicar com o botão direito para Habilitar o registro antes que os eventos apareçam.

Todos os logs pós-Windows Vista são salvos como arquivos
*.evtx
em vez do formato mais antigo*.evt
. A propriedadeIsClassicLog
indica se os eventos do log estão definidos em um Arquivo de Mensagens, formato*.mc
, ou em um manifesto, formato*.xml
.
Uma propriedade interessante é o LogMode
, que você pode ter notado que geralmente é definido como Circular
.
Circular
– Sobrescreve a entrada de log mais antiga quando estiver cheio.Retain
– Mantém todos os eventos até que o log esteja cheio e interrompe o registro até ser liberado.AutoBackup
– Faz automaticamente backup e arquiva os logs de eventos quando estiver cheio.

Finalmente, ao analisar a propriedade LogType
, existem vários tipos diferentes de logs. Esta propriedade funciona mais como uma propriedade de categorização, mas geralmente informa como o log é usado e os tipos de eventos exibidos.
- Administrativo – Destinado principalmente a usuários finais e usuários administrativos.
- Analítico – Geralmente, um log de alto volume, destinado a descrever operações do programa.
- Depuração – Destinado a desenvolvedores que precisam fazer uma análise profunda das entranhas do programa.
- Operacional – Um evento que ocorre durante a operação e é útil para diagnosticar ocorrências e acionar processos.

Listando Provedores de Log de Eventos
Agora que você tem uma compreensão sólida dos diferentes logs e suas propriedades, é útil entender o que é um Provedor de Log de Eventos. Um provedor, na terminologia de Log de Eventos, é uma fonte de um evento.
Os provedores de log de eventos são únicos e vinculados a cada log, como logs de Aplicativos ou de Sistema, e servirão como a fonte nomeada de onde um evento se origina.
Talvez você queira encontrar problemas ao filtrar logs e possa estar interessado apenas em problemas de um provedor específico. Para listar quais provedores estão disponíveis, use o parâmetro -ListProvider
. Como mostrado abaixo, o *
lista todos os provedores disponíveis e a quais logs os provedores estão vinculados, como Windows PowerShell ou Sistema.

Talvez você queira listar apenas os provedores disponíveis para um log específico, como System
. Para fazer isso, você pode filtrar eventos usando o comando Where-Object
usando os valores da propriedade LogLinks
. A propriedade LogLinks
mostra os logs de eventos vinculados como uma lista.
Para filtrar os logs solicitados com Where-Object
, use o operador de comparação -In
para filtrar apenas os eventos com System
no valor da propriedade LogLinks
. Finalmente, o uso de Format-Table -AutoSize
facilita a leitura da saída, como mostrado abaixo.

Recuperando Logs de Eventos Clássicos com Get-WinEvent
O primeiro passo para solucionar um problema no Windows é recuperar o log de eventos da Application ou System, que são os Logs de Eventos Clássicos. No exemplo abaixo, você recuperará os primeiros 100
eventos usando o parâmetro -MaxEvents
do log de eventos da Application.
Para facilitar a leitura dos resultados, selecione apenas as propriedades necessárias. Caso contrário, as entradas são agrupadas pelo nome do provedor, o que torna difícil analisar a lista de resultados.

Encontrando Eventos Modernos do Windows com Get-WinEvent
Agora que você recuperou eventos do log clássico de Aplicativos, que tal resultados de um Log de Eventos do Windows mais novo, como Microsoft-Windows-WindowsUpdateClient/Operacional
?
Ao contrário de um log de eventos clássico, como System
, o Microsoft-Windows-WindowsUpdateClient/Operacional
é um log moderno, com o Get-WinEvent
funcionando da mesma forma que abaixo.

Que tal obter apenas os eventos mais antigos? Embora você possa inverter a ordem dos resultados com Sort-Object
, use o parâmetro -Oldest
para recuperar os primeiros 10
eventos, conforme mostrado abaixo.
O comando Get-WinEvent
faz a filtragem para você, em vez de retornar todos os resultados e ordená-los, o que é tipicamente mais lento.

Recuperando Arquivos de Rastreamento de Eventos para Windows (ETW) com Get-WinEvent
Talvez você tenha um arquivo *.evtx
exportado de outro computador ou tenha feito backup de um log existente. Você pode ler esses logs com o cmdlet Get-WinEvent
. Se você precisa manter logs para fins de auditoria, Get-WinEvent
é uma ótima maneira de consultar esses logs rapidamente com cmdlets padrão dentro de scripts.
Para demonstrar a recuperação de entradas de log de um arquivo *.evtx
, você precisa de um arquivo de log exportado.
1. Abra o Visualizador de Eventos e navegue até um log. Neste exemplo, o log Application and Services Logs → Windows PowerShell.

2. Em seguida, clique no item de menu Salvar Todos os Eventos Como… no painel Ações.

3. Salve o arquivo em um local de disco para ser recuperado pelo comando Get-WinEvent
.

Agora que você exportou um arquivo de log, passe a localização do arquivo de log via parâmetro -Path
para ler os eventos. No exemplo mostrado abaixo, o log do Windows PowerShell é exportado para consumo posterior.

Filtrando Logs de Eventos do Windows Usando Get-WinEvent
Embora você pudesse filtrar logs com o cmdlet padrão Where-Object
, Get-WinEvent
oferece filtros integrados. Ao retornar todos os resultados e depois filtrar, mais trabalho é feito do que o necessário. Em vez disso, você sempre deve tentar filtrar na origem o máximo possível.
O cmdlet Get-WinEvent
fornece três parâmetros para ajudá-lo a filtrar milhares de eventos chamados -FilterHashTable
, -FilterXPath
e -FilterXML
. Cada parâmetro geralmente executa a mesma tarefa, apenas de maneira diferente.
Filtrando Logs de Eventos com FilterHashTable
O parâmetro -FilterHashTable
filtra o conteúdo com base nas propriedades correspondentes, como LogName
. Em vez de usar o parâmetro -LogName
para filtrar por um log específico, você pode usar um hash table, como @{'LogName' = 'Application'}
, que corresponderia à propriedade de evento LogName
.
O exemplo mostrado abaixo fornece um hash table para o parâmetro -FilterHashTable
que procura apenas o log de Aplicativos e com um horário de início que é todos os eventos após a meia-noite do dia atual, o Get-WinEvent
retorna rapidamente resultados.

FilterHashTable
parameter.Compare as velocidades de filtragem do mesmo comando acima com um filtrado via Where-Object
em vez do parâmetro -FilterHashTable
no pipeline. Como você pode ver, o comando usando Where-Object
é muito mais lento do que aquele que usa o parâmetro -FilterHashTable
.

FilterHashTable
and Where-Object
.Filtrando Logs de Eventos Usando o Parâmetro FilterXPath
As entradas de log de eventos são armazenadas como arquivos XML e, portanto, você pode usar a linguagem XPath, uma linguagem de consulta XML, para filtrar as entradas de log. Realizando o mesmo comando usado acima e traduzindo para XPath, você pode obter os mesmos resultados.
Para criar uma consulta XPath, use a capacidade de filtragem no Visualizador de Eventos do Windows, conforme mostrado abaixo.
1. Abra o Visualizador de Eventos e navegue até um log, como o log Registros do Windows → Aplicativo.

2. Em seguida, clique no link Filtro de Registro Atual no painel à direita.

3. Insira os parâmetros que deseja usar para filtrar o registro.

4. Clique na guia XML e copie a seção contida dentro da tag Select.

5. Agora, copie e cole o conteúdo copiado com o parâmetro -FilterXPath
. Agora você pode ver abaixo que usando a sintaxe XPath encontrada no visualizador de registros de eventos, você pode construir uma consulta para filtrar apenas as informações necessárias.

FilterXPath
parameter.Entrar em detalhes sobre como criar consultas XPath está fora do escopo deste artigo, mas o formato básico é mostrado abaixo. Quando o parâmetro FilterXPath
filtra uma data, você verá uma grande diferença: você precisa usar um formato de data mais específico, yyyy-MM-ddTHH:mm:ss.fffZ
, que a data deve ser retornada em UTC, o que é indicado pelo switch -AsUTC
.

Filtrando Resultados de Log de Eventos com FilterXML
Por fim, o último parâmetro de filtragem disponível é o parâmetro -FilterXML
. Ao contrário dos parâmetros -FilterXPath
e -FilterHashTable
, este parâmetro aceita XML que é então usado para filtrar os eventos. O parâmetro -FilterXML
permite regras mais complexas e, como mostrado abaixo, pode replicar os exemplos de filtragem anteriores.
Como mostrado no exemplo anterior, você pode recuperar uma consulta pré-formatada da habilidade Visualizador de Eventos → Filtrar Registro Atual. Em vez de selecionar apenas o conteúdo no nó Selecionar
, você usará toda a consulta. Não há filtros reais escolhidos, como indicado pelo *
no nó Selecionar
. Isso fornecerá a marcação geral para o próximo exemplo.

Em vez de criar um comando de uma linha, primeiro, separe a consulta XML e atribua a marcação a uma variável, $Consulta
, no exemplo abaixo. Atribuir a consulta a uma variável torna mais fácil de usar e legível. Em seguida, passe a variável $Consulta
para o parâmetro -FilterXML
do Get-WinEvent
.
Como mostrado abaixo, você vê os resultados da consulta mais complexa retornando todos os eventos daquele dia e armazenados no log de Aplicação
.

FilterXML
works.Conclusão
O cmdlet Get-WinEvent
torna rápido o trabalho de consultar várias fontes de log de eventos com poderosas capacidades de filtragem. Da auditoria à resolução de problemas, o cmdlet Get-WinEvent
é uma adição crucial para qualquer kit de ferramentas de Administradores de Sistema!