TUTOS.EU

Lire les journaux d’événements Windows avec Powershell

Retourner et filtrer les logs de Windows en Powershell

Liste des événements du journal d'application de moins de 2 jours

$Date = (Get-Date).AddDays(-2)
Get-WinEvent Application | Where-Object {$_.TimeCreated -ge $Date} | Format-Table TimeCreated, LogName, Level, LevelDisplayName, Id, ProviderName, Message
Lien vers le fichier : cliquez ici Copier le code

Lire le journal applicatif, ne retourner que les erreurs et les entrées ayant l'id 12291. Ne prendre que les évènements de moins de 2 jours. Ne retourner que le premier résulat :

Get-WinEvent Application | Where-Object {$_.Level -eq 2 -and $_.id -eq 12291 -and $_.TimeCreated -ge $Date} | Select-Object -first 1 | Format-Table TimeCreated, LogName, Level, LevelDisplayName, Id, ProviderName, Message
Lien vers le fichier : cliquez ici Copier le code

On peut stocker le résultat d'une recherche dans un objet puis lister chaque résultat un à un si l'objet n'est pas nul.

Exemple :

$Date = (Get-Date).AddDays(-2)
$objEvents = Get-WinEvent Application | Where-Object {$_.TimeCreated -ge $Date} | Select-Object -first 5 | Format-Table TimeCreated, LogName, Level, Id, ProviderName, Message

#if (!($objEvents -eq $null)){
#if ($objEvents){
if ($objEvents -ne $null){
	add-content $MonFichier "Erreur détectée"
	foreach ($OneVent in $objEvents){
		$OneVent
		#write-host $OneVent.LogName
	}
}
Lien vers le fichier : cliquez ici Copier le code

Le script powershell suivant permet d'exécuter une commande distante de recherche dans le journal de sécurité sur une liste de serveurs donnée :

$Date = (Get-Date).AddDays(-1)
$MesMachines = "machine01,machine02" -split ","
foreach ($UneLigne in $MesMachines){
	Write-host "Traitement de $UneLigne"
	Invoke-command -ScriptBlock { Get-WinEvent Security | Where-Object {$_.TimeCreated -ge $Date -and $_.id -eq 4624 -and $_.Message -like "*loginrecherche*"} | Select-Object -first 50 | Format-List TimeCreated, LogName, Level, LevelDisplayName, Id, ProviderName, Message } -ComputerName $UneLigne
}
Lien vers le fichier : cliquez ici Copier le code

Voici un tableau qui donne le nom de différents journaux

Nom du journal
Application
System
Security

Et voici un tableau qui donne la correspondance entre le numéro du champ Level et sa traduction

Numéro Traduction
2 Erreur
3 Avertissement
4 Information

Notez qu'il y a également la commande Get-EventLog

Elle ne fonctionne qu'avec les journaux 'classics', cad ceux de Windows XP et 2003

Pages Web

Site WebDescription
Ss64.com Get-WinEventExplication de la commande Get-WinEvent par Ss64.com
Ss64.com Get-EventLogExplication de la commande Get-EventLog par Ss64.com
Msdn.microsoft.com Get-WinEventDescription de la commande Get-WinEvent sur le MSDN
UltimatewindowssecurityWindows Security Log Events

2