Utilizzare PowerShell per esportare eventi da Windows Server 2008 e successivi

In alcuni casi si ha la necessità di esportare determinati eventi da un server, ad esempio perché devono essere archiviati in percorsi crittografati (normativa sulla privacy), per mancanza di spazio per l’archiviazione sul server o per permettere una gestione avanzata. Per fare questo esistono numerose soluzioni: dall’utilizzo di software di terze parti che eseguono l’operazione in maniera del tutto automatica all’implementazione di script che vanno a scrivere in database.
In questo articolo verrà proposta una soluzione semplice per raggiungere l’obiettivo solo con gli strumenti di Windows Server e senza l’utilizzo di database.

Per prima cosa è necessario predisporre un percorso per l’archiviazione dei file del registro eventi (.EVTX). Se necessario crittografare l’intera cartella, ad esempio tramite EFS. Se si utilizza una condivisione remota considerare che entrambi i computer dovranno disporre di un certificato valido per eseguire la scrittura e la lettura nella cartella crittografata.

A questo punto è possibile procedere alla creazione dello script (.PS1) e pianificare l’esecuzione dello stesso nell’intervallo di tempo specificato tramite l’ “Utilità di pianificazione” di Windows (taskschd.msc).

Prestare attenzione anche all’Execution Policy di PowerShell. Gli script non firmati di default non possono essere eseguiti, quindi potrebbe essere necessario prima configurare l’Execution Policy su “Unrestricted”.

Microsoft TechNet – Using the Set-ExecutionPolicy Cmdlet
Come linguaggio di Scripting è stato utilizzato PowerShell, ma è implementabile anche in VBScript riutilizzando il comando di “wevutil”.

# Percorso o cartella condivisa dove memorizzare i file
$mainpath='\\backupunit\backup_eventi'
# Strutturazione dei nomi file, nel mio caso ho optato per Accounts_giorno_mese
$outputfile=$mainpath+'\Accounts_'+(Get-Date).Month+'_'+(Get-Date).Day+'.evtx'
# Nel mio caso lo script di PowerShell esegue anche l'eliminazione automatica dei file più vecchi di 185 giorni presenti nella cartella
get-childitem $mainpath | where {$_.lastwritetime -lt (get-date).adddays(-185) -and -not $_.psiscontainer -and $_.extension -eq ".evtx"} |% {remove-item $_.fullname -force -verbose}
# Esegue l'esportazione del registro eventi in base al risultato di una query WQL
wevtutil epl Security /q:"*[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and ((EventID=4624) or (EventID=4634))] and EventData[(Data[@Name='TargetUserName']!='UtenteDaEscludere']]" $outputfile
# Se il file EVTX viene trovato (quindi il salvataggio è stato eseguito correttamente) viene quindi svuotato l'intero registro appena esportato
if(Test-Path $outputfile) {
wevtutil cl Security
}

Per utilizzare l’esportazione dei record dal registro è stato utilizzata l’utilità “WevtUtil”, la descrizione completa del comando è reperibile qui:

Microsoft TechNet – Wevtutil

La query WQL utilizzata nell’esempio esegue un filtro nel registro “Sicurezza”: include solo gli eventi aventi uno degli ID specificati e che non provengono da un determinato nome utente (ad esempio l’account amministrativo).

In alternativa per creare una query WQL personale è possibile utilizzare direttamente il “Visualizzatore eventi” di Windows (eventvwr.msc).

1) Spostarsi sul registro eventi da utilizzare per esportare i dati e creare un nuovo filtro personalizzato.

filtroregistro

2) Configurare le opzioni desiderate nella scheda “Filtro” quindi, senza chiudere la finestra, spostarsi sulla scheda “XML”. La query WQL da utilizzare è specificata nel tag “<select>”.

Selezionando la spunta “Modifica query manualmente” è possibile anche modificare una query manualmente e vedere gli eventi risultanti dopo aver confermato. Se il risultato è corretto è possibile aprire nuovamente il filtro ed esportare quindi la query WQL.

wqlregistro

Tutti gli eventi esportati in una singola esecuzione dello script vengono archiviati sotto forma di un unico file EVTX. Per visualizzarli è possibile utilizzare il “Visualizzatore eventi” di un qualsiasi computer dotato di Windows Vista o successivi (di norma l’estensione del file è associata automaticamente al visualizzatore).

2 interventi su “Utilizzare PowerShell per esportare eventi da Windows Server 2008 e successivi

  1. Giuliano

    Sono abbastanza principiante in materia ma vorrei creare un programma per monitorare alcune operazioni eseguite in una certa cartella, quindi ho attivato quanto dovuto per scrivere i miei eventi nel registro di sicurezza. Ora quello che vorrei ottenere è una cosa simile a quella descritta qui ma mi chiedevo se era possibile:
    – Prima che il registro Sicurezza venga sovrascritto perchè è stata superata la sua dimensione massima, deve essere salvato in una determinata directory e di conseguenza cancellato nel path di origine onde evitare di prendere dati parziali già registrati
    – Interrogare periodicamente la cartella tramite l’utilità di pianificazione per vedere se esistono log eventi salvati e di conseguenza avviare uno script che mi estrae i soli eventi desiderati con id 4663,4659,4660 e me li inserisce uno ad uno in una tabella mysql ed al termine mi cancella il file log eventi
    La cosa ideale sarebbe inserire lo script nell’utilità di pianificazione dal visualizzatore log eventi ma non ho trovato modo di potergli passare come argomento un qualcosa che rende univoca la ricerca di quell’evento nel log; in questo modo avrei potuto gestire l’inserimento in tempo reale dell’evento nel mio db senza dovermi preoccupare di nulla
    Qualche suggerimento?
    Grazie

    1. f.giammarini Autore

      Quello che vuoi fare è un po’ diverso da quello descritto nell’articolo.
      Nell’esempio lo script esporta in diversi file EVTX standard di Windows il contenuto del registro eventi filtrato (per limitare l’occupazione di spazio su disco). Quindi non si hanno sovrascritture di dati perché gli eventi vengono esportati regolarmente dallo script prima che venga saturato lo spazio del registro. Nella cartella si avrà quindi un file EVTX per esportazione (ad esempio un file per ogni giorno) che potrà essere aperto per la consultazione da una qualsiasi installazione di Windows. In realtà a mio parere è preferibile avere i dati archiviati in EVTX perché questo formato nasce per la sola lettura e una modifica dei dati contenuti è più difficoltosa.
      Nel tuo caso però parli di archiviazione in un database, che non può essere eseguita direttamente da wevtutil, quindi la procedura è decisamente più complessa perché deve essere eseguito un parsing XML del registro eventi.

Rispondi a Giuliano Annulla risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Informativa
Il sito utilizza i cookie per visualizzare annunci pubblicitari non personalizzati, analizzare il traffico e migliorare l'esperienza utente.
Chiudendo questo banner, scorrendo questa pagina, cliccando su un link o proseguendo la navigazione in altra maniera, si acconsente all’uso di tutti i cookie (anche di terze parti) e si accettano integralmente le condizioni di utilizzo.
Per saperne di più o per negare il consenso a tutti o ad alcuni cookie, consultare la pagina Informazioni

Questo sito utilizza i cookie per fornire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o cliccando su "Accetta" permetti il loro utilizzo.

Chiudi