O Windows possui vários registros de eventos diferentes, mas como você os recupera rapidamente? O cmdlet Get-WinEvent
pode recuperar registros de eventos clássicos do Windows, como os logs do Sistema e de Aplicações, logs gerados pela tecnologia Windows Event Log e até mesmo logs Event Tracing for Windows (ETW)!
Neste artigo, aprenda a aproveitar o Get-WinEvent
para recuperar e filtrar eventos dos 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á utilizando 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 logs disponíveis. Com o Get-WinEvent
, você pode listar todos os logs disponíveis rapidamente usando o parâmetro -ListLog
. O valor do parâmetro *
diz ao Get-WinEvent
para listar todos os logs sem filtragem. Como mostrado abaixo, todos os logs são recuperados, mas apenas um conjunto limitado de propriedades é exibido usando o Select-Object
cmdlet.
Nem todos os logs estão habilitados por padrão. Talvez seja necessário abrir o Visualizador de Eventos, localizar o log e clicar com o botão direito para Habilitar o log antes que os eventos sejam exibidos.

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 são definidos em um arquivo de Mensagem, formato*.mc
, ou em um manifesto, formato*.xml
.
Uma propriedade interessante é o LogMode
, que você pode ter notado que geralmente é definido como Circular
.
Circular
– Sobrescreva a entrada de log mais antiga quando estiver cheio.Retain
– Mantenha todos os eventos até que o log esteja cheio e pare de registrar até liberado.AutoBackup
– Faça automaticamente backup e arquive os logs de eventos quando estiverem cheios.

Por fim, ao observar a propriedade LogType
, existem vários tipos diferentes de logs. Esta propriedade serve mais como uma propriedade de categorização, mas geralmente informa como o log é usado e os tipos de eventos mostrados.
- Administrativo – Destinado principalmente para usuários finais e usuários administrativos.
- Analítico – Tipicamente, um registro de alto volume, destinado a descrever operações de programa.
- Depuração – Destinado para desenvolvedores que precisam de uma investigação profunda nos internos do programa.
- Operacional – Um evento que ocorre durante a operação e é útil para diagnosticar ocorrências e acionar processos.

Listagem de Provedores de Registro de Eventos
Agora que você tem um entendimento sólido dos diferentes registros e suas propriedades, ajuda a entender o que é um Provedor de Registro de Eventos. Um provedor, em terminologia de registro de eventos, é uma fonte de um evento.
Os provedores de registro de eventos são únicos e vinculados a cada registro, como os registros de Aplicativo ou Sistema, e servirão como a fonte nomeada de onde um evento se origina.
Talvez você queira encontrar problemas ao filtrar registros e talvez esteja 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 registros 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 os 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 -In
operador de comparação para filtrar apenas os eventos com System
no valor da propriedade LogLinks
. Por fim, 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 na solução de problemas de um problema do Windows é recuperar o log de Application ou System, que são Logs de Eventos Clássicos. No exemplo mostrado abaixo, você irá recuperar os primeiros 100
eventos usando o parâmetro -MaxEvents
do log de eventos de Application.
Para facilitar a leitura dos resultados, selecione apenas as propriedades necessárias para ler as entradas com mais facilidade. Caso contrário, as entradas são agrupadas pelo nome do provedor, o que torna a análise da lista de resultados difícil.

Encontrar Eventos Modernos do Windows com Get-WinEvent
Agora que você recuperou eventos do log de aplicativos clássico, e quanto aos resultados de um log de evento mais recente do Windows, como Microsoft-Windows-WindowsUpdateClient/Operational
?
Ao contrário de um log de evento clássico, como System
, o Microsoft-Windows-WindowsUpdateClient/Operational
é um log moderno, com o Get-WinEvent
funcionando da mesma forma que abaixo.

E quanto a obter apenas os eventos mais antigos? Embora você pudesse inverter a ordem dos resultados com Sort-Object
, use o parâmetro -Oldest
para recuperar os primeiros 10
eventos, como mostrado abaixo.
O comando Get-WinEvent
filtra os resultados para você em vez de retornar todos os resultados e ordená-los, o que é geralmente mais lento.

Recuperando Arquivos de Rastreamento de Eventos para Windows (ETW) com Get-WinEvent
Talvez você tenha um arquivo exportado *.evtx
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 com cmdlets padrão dentro de scripts rapidamente.
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 vá para um log. Neste exemplo, o log Logs de Aplicativos e Serviços → Windows PowerShell.

2. Em seguida, clique em Salvar Todos os Eventos Como… no item de menu 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 por meio do parâmetro -Path
para ler os eventos. No exemplo mostrado abaixo, o log do Windows PowerShell é exportado para consumo posterior.

Filtragem de Registros de Eventos do Windows usando Get-WinEvent
Embora você possa filtrar logs com o cmdlet padrão Where-Object
, Get-WinEvent
oferece filtros incorporados. 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 ajudar na filtragem de milhares de eventos chamados -FilterHashTable
, -FilterXPath
e -FilterXML
. Cada parâmetro geralmente realiza a mesma tarefa, apenas de maneiras diferentes.
Filtragem de Registros 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 hashtable, como @{'LogName' = 'Application'}
, que corresponderia à propriedade do evento LogName
.
O exemplo abaixo fornece um hashtable para o parâmetro -FilterHashTable
que procura apenas o log de Aplicativos e com um horário de início que seja todos os eventos após a meia-noite do dia atual, Get-WinEvent
retorna rapidamente os resultados.

FilterHashTable
parameter.Compare as velocidades de filtragem do mesmo comando acima com um filtrado via Where-Object
em vez de via o 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 Registros 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 os registros 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, como mostrado abaixo.
1. Abra o Visualizador de Eventos e navegue até um log, como o log de Logs do Windows → Aplicativo.

2. Em seguida, clique no link Filtrar Registro Atual no painel direito.

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 log de eventos, pode criar uma consulta para filtrar apenas as informações necessárias.

FilterXPath
parameter.Entrar em detalhes sobre como elaborar 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: é necessário usar um formato de data mais específico, yyyy-MM-ddTHH:mm:ss.fffZ
, e a data deve ser retornada em UTC, como indicado pelo interruptor -AsUTC
.

Filtrando Resultados de Log de Eventos com FilterXML
Finalmente, 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 é usado para filtrar os eventos. O parâmetro -FilterXML
permite regras mais complexas e, como mostrado abaixo, pode replicar os exemplos de filtragem anteriores.
Conforme mostrado no exemplo anterior, você pode recuperar uma consulta pré-formatada da capacidade de Visualizador de Eventos → Filtrar Log Atual. Em vez de apenas selecionar 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, $Query
, no exemplo abaixo. Atribuir a consulta a uma variável torna a utilização e a legibilidade melhores. Em seguida, passe a variável $Query
para o parâmetro -FilterXML
de Get-WinEvent
.
Conforme mostrado abaixo, você vê os resultados da consulta mais complexa retornando todos os eventos daquele dia e armazenados no log Aplicativo
.

FilterXML
works.Conclusão
O cmdlet Get-WinEvent
facilita a consulta de várias fontes de log de eventos com poderosas capacidades de filtragem. Desde auditoria até resolução de problemas, o cmdlet Get-WinEvent
é uma adição crucial para o arsenal de qualquer Administrador de Sistemas!