(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Como exportar eventos de Segurança do Windows em PowerShell: passo a passo

João Barros 05 de September de 2026 4 min de leitura

Este guia mostra como exportar eventos do registo de Segurança do Windows em PowerShell para análise, auditoria e integração com outras ferramentas. Saber filtrar por ID, intervalo de tempo e exportar para CSV ou XML é útil para detetar falhas de autenticação, alterações de política ou actividades suspeitas.

Pré-requisitos

  • Windows 10/11 ou Windows Server com PowerShell 5.1 ou PowerShell 7 instalado.
  • Permissões administrativas para ler o registo de Segurança.
  • Editor de texto (Notepad, VS Code) para guardar scripts.

Passo 1: Entender o registo e os Event IDs comuns

Antes de correr comandos, é importante saber que o registo de Segurança contém eventos como falhas de início de sessão (Event ID 4625), sucesso de início de sessão (4624) e alteração de privilégios (4672). Identificar os Event IDs que interessam facilita o filtro e reduz o volume de dados.

Passo 2: Listar eventos recentes com Get-WinEvent

Get-WinEvent é mais flexível que Get-EventLog para registos modernos. Use um filtro simples para ver os 50 eventos mais recentes do canal Security.

Get-WinEvent -LogName Security -MaxEvents 50 | Select-Object TimeCreated, Id, LevelDisplayName, Message

Passo 3: Filtrar por Event ID e intervalo de tempo

Para procurar eventos específicos, combine um Hashtable de filtro com Get-WinEvent. Exemplo: todos os Event ID 4625 nos últimos 7 dias.

$filter = @{LogName='Security'; Id=4625; StartTime=(Get-Date).AddDays(-7)}
Get-WinEvent -FilterHashtable $filter | Select-Object TimeCreated, Id, Message

Passo 4: Filtrar por vários Event IDs

Quando precisa de vários Event IDs (ex.: 4624 e 4625) use uma matriz no filtro. Isto é útil para comparar sucessos e falhas de início de sessão.

$ids = @(4624,4625)
$filter = @{LogName='Security'; Id=$ids; StartTime=(Get-Date).AddDays(-1)}
Get-WinEvent -FilterHashtable $filter | Select-Object TimeCreated, Id, Message

Passo 5: Extrair campos úteis do Message

O campo Message contém texto livre. Para relatórios, extraia valores como AccountName ou IP com expressões regulares simples.

Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625; StartTime=(Get-Date).AddDays(-1)} |
ForEach-Object {
  $msg = $_.Message
  $account = ($msg -match 'Account Name:\s+(\S+)' ) ? $matches[1] : ''
  $ip = ($msg -match 'Source Network Address:\s+(\S+)' ) ? $matches[1] : ''
  [PSCustomObject]@{
    TimeCreated = $_.TimeCreated
    Id = $_.Id
    Account = $account
    SourceIP = $ip
  }
} | Format-Table -AutoSize

Passo 6: Exportar para CSV

Depois de construir objectos limpos, exporte para CSV para análise no Excel ou para armazenamento. Escolha um caminho com permissões de escrita.

$out = 'C:\Temp\SecurityEvents.csv'
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=@(4624,4625); StartTime=(Get-Date).AddDays(-7)} |
ForEach-Object {
  $msg = $_.Message
  $account = ($msg -match 'Account Name:\s+(\S+)' ) ? $matches[1] : ''
  $ip = ($msg -match 'Source Network Address:\s+(\S+)' ) ? $matches[1] : ''
  [PSCustomObject]@{
    TimeCreated = $_.TimeCreated
    Id = $_.Id
    Account = $account
    SourceIP = $ip
  }
} | Export-Csv -Path $out -NoTypeInformation -Encoding UTF8
Write-Host "Exportado para $out"

Passo 7: Exportar para XML ou ficheiro bruto

Para arquivar a estrutura completa do evento, exporte o evento inteiro em formato XML. Isto preserva todos os campos e é útil para ingestão por ferramentas SIEM.

$xmlOut = 'C:\Temp\SecurityEvents.xml'
Get-WinEvent -FilterHashtable @{LogName='Security'; StartTime=(Get-Date).AddDays(-1)} |
Select-Object -First 100 | ForEach-Object { $_.ToXml() } | Out-File -FilePath $xmlOut -Encoding UTF8
Write-Host "XML guardado em $xmlOut"

Passo 8: Agendar exportação automática (opção)

Se precisa de relatórios regulares, guarde o script e crie uma tarefa no Task Scheduler que execute PowerShell com o ficheiro. Certifique-se de correr com credenciais que tenham acesso ao registo de Segurança.

powershell -ExecutionPolicy Bypass -File C:\Scripts\ExportSecurityEvents.ps1

Verificar o resultado

Abra o ficheiro CSV no Excel ou o XML num editor para confirmar que os eventos foram exportados. Verifique o número de linhas, os timestamps e se os campos Account/SourceIP estão preenchidos. Se não houver resultados, confirme permissões e o intervalo de tempo usado.

Conclusão

Exportar eventos de Segurança em PowerShell permite monitorizar autenticações e actividades suspeitas e alimentar SIEMs ou relatórios. Para avançar, experimente filtrar por EventData mais específicos, integrar com Send-MailMessage para alertas ou enviar para um endpoint REST. Dica: comece por testar filtros pequenos (1 dia, poucos Event IDs) para evitar grandes dumps de dados — que evento pretende analisar primeiro?