Windows dispose de plusieurs journaux d’événements différents, mais comment les récupérer rapidement ? La cmdlet Get-WinEvent
peut récupérer les journaux d’événements Windows classiques tels que les journaux Système et Application, les journaux générés par la technologie de journalisation des événements Windows, et même les journaux de suivi des événements pour Windows (ETW) !
Dans cet article, apprenez comment exploiter Get-WinEvent
pour récupérer et filtrer les événements à partir des journaux d’événements !
Prérequis
Pour suivre, vous avez seulement besoin d’une version actuelle de Windows 10 et de PowerShell 5.1 et supérieur. Cet article utilise Windows 10 et PowerShell 7.1.
Liste des journaux disponibles avec Get-WinEvent
Il est difficile de savoir quels entrées de journal vous pourriez avoir besoin sans connaître tous les journaux disponibles. Avec Get-WinEvent
, vous pouvez lister tous les journaux disponibles rapidement en utilisant le paramètre -ListLog
. La valeur *
du paramètre indique à Get-WinEvent
de lister tous les journaux sans filtre. Comme illustré ci-dessous, tous les journaux sont récupérés, mais seulement un ensemble limité de propriétés est affiché en utilisant le cmdlet Select-Object
.
Tous les journaux ne sont pas activés par défaut. Vous devrez peut-être ouvrir l’Observateur d’événements, localiser le journal, et cliquer avec le bouton droit pour Activer le journal avant que les événements ne s’affichent.

Tous les journaux après Windows Vista sont enregistrés en tant que fichiers
*.evtx
au lieu du format plus ancien*.evt
. La propriétéIsClassicLog
indique si les événements du journal sont définis dans un fichier Fichier de message, format*.mc
, ou dans un manifeste, format*.xml
.
Une propriété intéressante est LogMode
, que vous avez peut-être remarqué est généralement définie sur Circular
.
Circular
– Écrase la plus ancienne entrée de journal une fois pleine.Retain
– Conserve tous les événements jusqu’à ce que le journal soit plein et cesse l’enregistrement jusqu’à ce qu’il soit libéré.AutoBackup
– Sauvegarde automatique et archivage des journaux d’événements une fois pleins.

Enfin, en regardant la propriété LogType
, il existe plusieurs types de journaux. Cette propriété sert davantage de propriété de catégorisation, mais elle informe généralement sur la façon dont le journal est utilisé et les types d’événements affichés.
- Administratif – Principalement destiné aux utilisateurs finaux et aux utilisateurs administratifs.
- Analytique – Généralement, un journal à volume élevé, destiné à décrire les opérations du programme.
- Débogage – Destiné aux développeurs ayant besoin d’une plongée approfondie dans les internes du programme.
- Opérationnel – Un événement qui se produit pendant le fonctionnement et est utile pour diagnostiquer les occurrences et déclencher des processus.

Listing des fournisseurs de journaux d’événements
Maintenant que vous avez une compréhension solide des différents journaux et de leurs propriétés, il est utile de comprendre ce qu’est un Fournisseur de journaux d’événements. Un fournisseur, dans la terminologie des journaux d’événements, est une source d’événements.
Les fournisseurs de journaux d’événements sont uniques et liés à chaque journal, tels que les journaux d’application ou de système, et serviront de source nommée où un événement se produit.
Peut-être souhaitez-vous trouver des problèmes lors du filtrage des journaux, et vous pourriez être intéressé uniquement par les problèmes d’un fournisseur particulier. Pour répertorier les fournisseurs disponibles, utilisez le paramètre -ListProvider
. Comme indiqué ci-dessous, le *
répertorie tous les fournisseurs disponibles et les journaux auxquels les fournisseurs sont liés, tels que Windows PowerShell ou System.

Peut-être souhaitez-vous uniquement répertorier les fournisseurs disponibles pour un journal particulier, tel que System
. Pour ce faire, vous pouvez filtrer les événements en utilisant la commande Where-Object
en utilisant les valeurs de la propriété LogLinks
. La propriété LogLinks
affiche les journaux d’événements liés sous forme de liste.
Pour filtrer les journaux demandés avec Where-Object
, utilisez l’opérateur de comparaison -In
pour filtrer uniquement les événements avec System
dans la valeur de la propriété LogLinks
. Enfin, l’utilisation de Format-Table -AutoSize
facilite la lecture de la sortie, comme indiqué ci-dessous.

Récupération des journaux d’événements classiques avec Get-WinEvent
La première étape pour résoudre un problème Windows est de récupérer le journal d’événements de l’Application ou du Système, qui sont des journaux d’événements classiques. Dans l’exemple ci-dessous, vous récupérerez les 100
premiers événements à l’aide du paramètre -MaxEvents
du journal d’événements de l’Application.
Pour faciliter la lecture des résultats, sélectionnez uniquement les propriétés nécessaires à une lecture plus facile des entrées. Sinon, les entrées sont regroupées par le nom du fournisseur, ce qui rend l’analyse de la liste des résultats difficile.

Trouver les événements Windows modernes avec Get-WinEvent
Maintenant que vous avez récupéré des événements du journal d’application classique, que diriez-vous des résultats d’un journal d’événements Windows plus récent, tel que Microsoft-Windows-WindowsUpdateClient/Operational
?
Contrairement à un journal d’événements classique, tel que System
, le journal Microsoft-Windows-WindowsUpdateClient/Operational
est un journal moderne, avec Get-WinEvent
fonctionnant de la même manière que ci-dessous.

Et obtenir seulement les événements les plus anciens ? Bien que vous puissiez inverser l’ordre des résultats avec Sort-Object
, utilisez le paramètre -Oldest
pour récupérer les 10
premiers événements, comme indiqué ci-dessous.
La commande Get-WinEvent
effectue le filtrage pour vous au lieu de renvoyer tous les résultats et de les trier, ce qui est généralement plus lent.

Récupération des fichiers de traçage des événements Windows (ETW) avec Get-WinEvent
Peut-être avez-vous un fichier exporté *.evtx
d’un autre ordinateur ou avez-vous sauvegardé un journal existant. Vous pouvez lire ces journaux avec la cmdlet Get-WinEvent
. Si vous devez conserver des journaux à des fins d’audit, Get-WinEvent
est un excellent moyen d’interroger rapidement ces journaux avec des cmdlets standard dans des scripts.
Pour démontrer la récupération des entrées de journal à partir d’un fichier *.evtx
, vous avez besoin d’un fichier journal exporté.
1. Ouvrez le Visualiseur d’événements et naviguez jusqu’à un journal. Dans cet exemple, le journal Applications et Services → Windows PowerShell.

2. Ensuite, cliquez sur l’élément de menu Enregistrer tous les événements sous… dans le volet Actions.

3. Enregistrez le fichier dans un emplacement de disque pour qu’il soit récupéré par la commande Get-WinEvent
.

Maintenant que vous avez exporté un fichier journal, passez l’emplacement du fichier journal via le paramètre -Path
pour lire les événements. Dans l’exemple ci-dessous, le journal Windows PowerShell est exporté pour une consommation ultérieure.

Filtrer les journaux d’événements Windows à l’aide de Get-WinEvent
Bien que vous puissiez filtrer les journaux avec la commande standard Where-Object
, Get-WinEvent
offre des filtres intégrés. En retournant tous les résultats puis en filtrant, plus de travail est effectué que nécessaire. Au lieu de cela, vous devriez toujours essayer de filtrer à la source autant que possible.
La commande Get-WinEvent
fournit trois paramètres pour vous aider à filtrer à travers des milliers d’événements appelés -FilterHashTable
, -FilterXPath
, et -FilterXML
. Chaque paramètre accomplit généralement la même tâche mais de manière différente.
Filtrage des journaux d’événements avec FilterHashTable
Le paramètre -FilterHashTable
filtre le contenu en fonction des propriétés correspondantes, telles que LogName
. Au lieu d’utiliser le paramètre -LogName
pour filtrer par un journal spécifique, vous pouvez plutôt utiliser une table de hachage, telle que @{'LogName' = 'Application'}
, qui correspondrait à la propriété d’événement LogName
.
L’exemple ci-dessous fournit une table de hachage au paramètre -FilterHashTable
qui recherche uniquement le journal Application et avec une heure de début correspondant à tous les événements après minuit du jour en cours, Get-WinEvent
retourne rapidement des résultats.

FilterHashTable
parameter.Comparez les vitesses de filtrage de la même commande ci-dessus à celle filtrée via Where-Object
plutôt que via le paramètre -FilterHashTable
sur le pipeline. Comme vous pouvez le voir, la commande utilisant Where-Object
est beaucoup plus lente que celle utilisant le paramètre -FilterHashTable
.

FilterHashTable
and Where-Object
.Filtrage des journaux d’événements à l’aide du paramètre FilterXPath
Les entrées de journal d’événements sont stockées sous forme de fichiers XML, et donc vous pouvez utiliser le langage XPath, un langage de requête XML, pour filtrer les entrées de journal. En effectuant la même commande utilisée ci-dessus et en la traduisant en XPath, vous pouvez obtenir les mêmes résultats.
Pour créer une requête XPath, utilisez la capacité de filtrage dans l’Observateur d’événements Windows, comme illustré ci-dessous.
1. Ouvrez le Observateur d’événements et accédez à un journal, tel que le journal Windows Logs → Application.

2. Ensuite, cliquez sur le lien Filtrer le journal actuel dans le volet de droite.

3. Entrez les paramètres que vous souhaitez utiliser pour filtrer le journal.

4. Cliquez sur l’onglet XML et copiez la section contenue dans la balise Sélectionner.

5. Maintenant, copiez et collez le contenu copié avec le paramètre -FilterXPath
. Vous pouvez maintenant voir ci-dessous qu’en utilisant la syntaxe XPath trouvée à partir de l’observateur de journal d’événements, vous pouvez construire une requête pour filtrer uniquement les informations nécessaires.

FilterXPath
parameter. Plonger dans la façon de créer des requêtes XPath est hors de portée pour cet article, mais le format de base est indiqué ci-dessous. Lorsque le paramètre FilterXPath
filtre une date, vous verrez une grande différence : vous devez utiliser un format de date plus spécifique, yyyy-MM-ddTHH:mm:ss.fffZ
, que la date doit être renvoyée en UTC, ce qui est indiqué par le commutateur -AsUTC
.

Filtrer les résultats du journal d’événements avec FilterXML
Enfin, le dernier paramètre de filtrage disponible est le paramètre -FilterXML
. Contrairement aux paramètres -FilterXPath
et -FilterHashTable
, ce paramètre prend XML qui est ensuite utilisé pour filtrer les événements. Le paramètre -FilterXML
permet des règles plus complexes, et comme le montre l’exemple ci-dessous, peut reproduire les exemples de filtrage précédents.
Comme indiqué dans l’exemple précédent, vous pouvez récupérer une requête pré-formatée à partir de la capacité Observateur d’événements → Filtrer le journal actuel. Au lieu de sélectionner uniquement le contenu dans le nœud Sélectionner
, vous utiliserez l’intégralité de la requête. Aucun filtre réel n’est choisi, comme indiqué par le *
dans le nœud Sélectionner
. Cela fournira la balise générale pour l’exemple suivant.

Au lieu de créer une commande d’une seule ligne, séparez d’abord la requête XML et attribuez la balise à une variable, $Query
, dans l’exemple ci-dessous. Attribuer la requête à une variable permet une meilleure facilité d’utilisation et de lisibilité. Ensuite, transmettez la variable $Query
au paramètre -FilterXML
de Get-WinEvent
.
Comme indiqué ci-dessous, vous voyez les résultats de la requête plus complexe renvoyant tous les événements de cette journée et stockés dans le journal Application
.

FilterXML
works.Conclusion
La cmdlet Get-WinEvent
facilite la tâche de requête de multiples sources de journaux d’événements avec de puissantes capacités de filtrage. De l’audit à la résolution de problèmes, la cmdlet Get-WinEvent
est un ajout crucial à la trousse à outils de tout administrateur système !