Como exportar eventos de Segurança do Windows em PowerShell: passo a passo
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?