Como usar o comando Get-WinEvent no PowerShell

Última atualização: 30/07/2025
autor: Isaac
  • Get-WinEvent supera Get-EventLog ao permitir filtros avançados e acesso a logs modernos
  • O uso de tabelas de hash e XPath otimiza a busca por eventos específicos em grandes volumes de dados. toras
  • Permite o gerenciamento de logs locais, remotos e arquivados com controle sobre permissões e credenciais

Obter-WinEvent PowerShell

PowerShell Ele evoluiu para uma das ferramentas essenciais para gerenciamento de sistemas avançados. Windows. Entre seus cmdlets mais poderosos está Get-WinEvent, que permite que administradores e usuários obtenham logs de eventos, auditem ações e monitorem o status de seus computadores ou servidores de uma maneira muito detalhada e flexível.

Neste artigo você descobrirá tudo o que precisa saber sobre o Comando Get-WinEvent do PowerShell: desde sua sintaxe, diferenças em relação a outros cmdlets clássicos como Get-EventLog, exemplos práticos, otimização de filtros usando tabelas de hash, detalhes sobre parâmetros-chave e dicas para aproveitá-lo ao máximo na análise de eventos locais e remotos. Se você deseja dominar a análise de logs e a solução de problemas no Windows, continue lendo.

O que é Get-WinEvent e por que ele é tão útil?

Get-WinEvent é um cmdlet exclusivo para Windows que permite acessar e navegar pelos logs de eventos do sistema operacional. Sua principal função é recuperar eventos armazenados tanto em logs clássicos (como "Sistema" ou "Aplicativo") quanto em logs criados a partir do Windows Vista, bem como em arquivos externos (.evtx, .etl y .evt).

Este comando incorpora vantagens significativas sobre seu antecessor, Obter-EventLogPor exemplo, você pode consultar logs que o Get-EventLog não consegue acessar, usar filtros avançados (tabelas de hash, XPath, XML estruturado) e trabalhar com logs remotos sem depender do sistema de comunicação remota clássico do PowerShell. Assim, Torna-se uma ferramenta básica para monitoramento, auditoria e resolução de incidentes. ou analisar a atividade de sistemas individuais e grandes infraestruturas de servidores.

Sintaxe geral e conjuntos de parâmetros

Sintaxe do PowerShell Get-WinEvent

O cmdlet Get-WinEvent Apresenta uma sintaxe versátil que suporta múltiplos usos, dependendo das informações que você deseja obter e do tipo de filtro aplicado. Alguns dos conjuntos de parâmetros mais comuns são:

  • Pesquisar por nome de registro: Get-WinEvent >] ...
  • Lista de registros disponíveis: Get-WinEvent -ListLog *
  • Consulta de provedores de registros: Get-WinEvent -ListProvider *
  • Filtragem por tabela hash: Get-WinEvent -FilterHashtable @{ LogName='Application'; Id=1001 }
  • Filtrado por XPath: Get-WinEvent -FilterXPath "*]"
  • Filtrado por XML: Get-WinEvent -FilterXml $xmlQuery

Por favor, note: Sem parâmetros, Get-WinEvent recupera todos os eventos de todos os logs do computador local, o que pode gerar uma saída muito longa. Para interromper o comando, basta pressionar CTRL + C.

  Configurando o Windows 11 com o Copilot: etapas, atalhos e controle total

Parâmetros principais do Get-WinEvent

O cmdlet suporta uma ampla variedade de parâmetros, permitindo que você obtenha exatamente as informações necessárias. Aqui está um resumo detalhado dos mais importantes:

  • -Nome do Log: Permite especificar um ou mais nomes de log de eventos. Caracteres curinga são aceitos.
  • -Nome do Provedor: Filtre os resultados com base em provedores de eventos específicos. Ideal para identificar a origem de eventos específicos.
  • -Caminho: Permite consultar eventos em arquivos salvos com a extensão .evtx, .evt ou .etl, mesmo de outras máquinas.
  • -Tabela de Hash do Filtro: Suporta uma tabela de hash com pares de chave-valor para filtrar eficientemente por vários critérios (como LogName, ProviderName, ID, Nível, datas, etc.).
  • -FilterXPath / -FilterXml: Eles permitem que você aplique filtros baseados em consultas XPath ou XML para critérios complexos.
  • -MaxEventos: Limita o número máximo de eventos retornados, o que é muito útil para evitar saídas gigantescas.
  • -Mais antigo: Você pode especificar que deseja receber eventos classificados do mais antigo para o mais novo (por padrão, é o contrário).
  • -Nome do computador: Consulte logs em computadores remotos especificando o nome NetBIOS, FQDN ou IP.
  • -Credencial: Permite que você se autentique como outro usuário ou com credenciais diferentes das atuais.
  • -Vigor: É necessário incluir logs de depuração e análise na consulta, além dos usuais.

Muitos desses parâmetros podem ser combinados para obter uma consulta precisa e poderosa.

Filtragem Avançada: Usando FilterHashtable

PowerShell do FilterHashtable

Um dos Os maiores pontos fortes do Get-WinEvent é sua capacidade de filtrar eventos usando tabelas hash. Em vez de buscar todos os eventos e filtrá-los em uma segunda etapa (algo ineficiente), FiltroHashtable Ele aplica filtros no próprio processo de coleta, melhorando o desempenho e reduzindo o consumo de recursos, especialmente em logs grandes.

Uma tabela hash neste contexto consiste em pares chave-valor, como @{ LogName='Application'; Id=1001; Level=2 }Cada par será um critério de busca. As chaves primárias aceitas incluem:

  • Nome do registro (curingas permitidos): nome do registro.
  • Nome do provedor (suporte a curinga): origem do evento.
  • Caminho: caminho para arquivos de log salvos.
  • Id: identificador numérico do evento.
  • Nível: nível de gravidade (Erro=2, Aviso=3, Informativo=4…)
  • Palavras-chave: filtrar por palavras-chave técnicas (tipo Long[]).
  • Hora de início / Fim do tempo: filtrar por intervalo de datas.
  • ID do usuário: SID ou nome de usuário associado ao evento.
  • Dados o : dados de eventos personalizados.

Por exemplo, para obter eventos críticos de um fornecedor específico no log do aplicativo dos últimos 2 dias:

$fecha = (Get-Date).AddDays(-2)
Get-WinEvent -FilterHashtable @{ LogName='Application'; ProviderName='.NET Runtime'; Level=1; StartTime=$fecha }

Conselho: Cada chave na tabela de hash deve aparecer apenas uma vez, e curingas são válidos somente em LogName e ProviderName.

  A melhor maneira de configurar e usar ‘Discover My’ no Mac

Exemplos práticos de uso

Consultar e analisar logs de eventos pode parecer tedioso, mas com a versatilidade deste cmdlet, as possibilidades são infinitas. Aqui estão alguns exemplos baseados em cenários reais:

  • Listar todos os logs de eventos disponíveis no sistema:
    Get-WinEvent -ListLog *
  • Obtenha os eventos mais recentes do log do 'Sistema':
    Get-WinEvent -LogName System -MaxEvents 10
  • Filtrar apenas erros de aplicação:
    Get-WinEvent -FilterHashtable @{ LogName='Application'; Level=2 }
  • Ver eventos gerados por um provedor:
    Get-WinEvent -FilterHashtable @{ LogName='Application'; ProviderName='Application Error' }
  • Verifique eventos em outros logs do computador:
    Get-WinEvent -LogName System -ComputerName Servidor01
  • Ler arquivos salvos:
    Get-WinEvent -Path 'C:\Test\Windows PowerShell.evtx'
  • Obter eventos para uma palavra-chave específica:
    Get-WinEvent -LogName *PowerShell*, Microsoft-Windows-Kernel-WHEA* | Group-Object -Property LevelDisplayName, LogName -NoElement | Format-Table -AutoSize

Saída, objetos retornados e compatibilidade

Dependendo dos parâmetros utilizados, Get-WinEvent pode retornar objetos de diferentes tipos:

  • Configuração do log de eventos: ao usar -Lista de logs, fornece configuração e propriedades para cada registro.
  • Metadados do provedor: com -Provedor de Lista, exibe metadados para provedores de eventos.
  • Registro de log de eventos: Por padrão, ele representa cada evento específico e seus atributos (data, ID, mensagem, etc.).

Eles podem ser processados em um pipeline e filtrados, agrupados ou exportados para outros formatos (CSV, HTML, XML, etc.). Vale lembrar que Get-WinEvent substitui gradualmente Obter-EventLog, que era mais limitado e suportava apenas logs clássicos.

Visualização e análise avançadas de logs

Além da análise de eventos via console ou scripts, você pode inspecionar logs usando o Visualizador de eventos do Windows ((https://mundobytes.com/how-to-use-windows-event-viewer-to-detect-and-anticipate-problems/)), embora Get-WinEvent permita maior automação, integração e uso remoto.

Para analisar tendências ou problemas, aproveite cmdlets como Objeto de grupo para agrupar eventos por ID, Classificar-objeto para classificá-los e Select-Object para limitar os campos exibidos. Por exemplo, para ver quantos eventos de cada tipo você tem no log:

$eventos = Get-WinEvent -LogName 'Windows PowerShell'
$eventos | Group-Object -Property LevelDisplayName | Format-Table Count, Name

Filtragem XPath e XML: quando você precisa de precisão máxima

Em cenários particularmente complexos, pode ser útil usar parâmetros como -FilterXPath y -FiltroXml para consultas avançadas. Por exemplo, para encontrar eventos de um determinado nível e data no log do Windows PowerShell:

# Filtrado por XPath
Get-WinEvent -LogName 'Windows PowerShell' -FilterXPath "*]]"

# Filtrado por XML
$xmlQuery = @'
<QueryList>
  <Query Path="Windows PowerShell">
    <Select Path="System">*]]</Select>
  </Query>
</QueryList>'
Get-WinEvent -FilterXml $xmlQuery

Comparação com Get-EventLog e melhores práticas

Comparação de Get-EventLog e Get-WinEvent

Embora Obter-EventLog Ele ainda existe para compatibilidade com versões anteriores, mas seus recursos são visivelmente inferiores. Por exemplo, ele acessa apenas logs clássicos e não permite filtragem por provedor ou via XPath/Hashtable. À medida que o PowerShell avança e suas necessidades aumentam, é uma boa ideia se familiarizar com ele. Get-WinEvent e aproveite filtros avançados e processamento de eventos de alto volume com menor impacto no desempenho.

  Impedir que o iPhone se conecte automaticamente a redes WiFi

Algumas recomendações úteis:

  • uso Obter-EventLog para consultas rápidas em logs de sistema ou de segurança.
  • Aplicar Get-WinEvent para filtrar e analisar logs modernos, logs arquivados e cenários complexos.
  • Para encontrar o caminho exato dos logs não clássicos, primeiro use o Visualizador de Eventos e copie o caminho para o parâmetro -Nome do Log.
  • Evite despejar todos os eventos no console: use -MaxEventos para limitar a saída ou filtrar com tabelas de hash.
  • Ao trabalhar com logs grandes ou entre várias equipes, automatize tarefas com scripts e pipelines.

Variáveis de log do PowerShell e personalização

O PowerShell permite que você configure quais tipos de eventos são registrados editando variáveis de preferência, como $LogEngineLifeCycleEvent o $LogCommandHealthEvent. Desta forma, você pode decidir se deseja registrar detalhes do motor, fornecedores ou comandos executado, ajustando a granularidade de acordo com suas necessidades.

A ativação/desativação é feita da seguinte forma:

$LogCommandLifeCycleEvent = $true   # Para registrar inicio/fin de comandos
$LogProviderHealthEvent = $false    # Para desactivar eventos de proveedor

As alterações afetam apenas a sessão atual, a menos que sejam adicionadas ao perfil do PowerShell.

Perguntas frequentes sobre Get-WinEvent e logs de eventos

  • Posso limpar o log de eventos do PowerShell?
    Se com Clear-EventLog -LogName "Windows PowerShell" ou no Visualizador de Eventos (clique com o botão direito > Esvaziar Log).
  • Onde os arquivos de log de eventos são armazenados?
    Eles estão localizados em %SystemRoot%\System32\winevt\Logs em arquivos .evtx.
  • É possível encaminhar logs para um sistema centralizado?
    Correto. O Windows pode ser configurado para encaminhar logs de eventos para um servidor central usando serviços nativos ou ferramentas externas.
  • O Get-WinEvent funciona em qualquer versão do Windows?
    Compatível apenas com Windows Vista e Server 2008 R2 e versões posteriores. Não funciona no Windows PE ou Nano Server.
visualizador de eventos do Windows Eventvwr
Artigo relacionado:
Como usar o Visualizador de Eventos do Windows para detectar e antecipar problemas