Tutoriel sur l'utilisation des événements dans PowerShell : des journaux à l'automatisation avancée

Dernière mise à jour: 05/06/2025
Auteur: Isaac
  • PowerShell vous permet de gérer différents types d'événements : moteur, .NET, WMI et plus encore.
  • Les applets de commande telles que Register-ObjectEvent et Get-Event vous permettent de travailler avec des événements en temps réel.
  • Les tâches peuvent être automatisées en détectant des événements tels que les arrêts de processus, les modifications de fichiers ou les journaux système.
  • PowerShell vous permet de lire, filtrer et exporter des événements à partir des journaux standard et personnalisés. Windows.

événements événements Windows

Souhaitez-vous apprendre à gérer efficacement les événements dans PowerShell et exploiter ses fonctionnalités pour automatiser des tâches ou détecter l'activité système ? Bien que PowerShell soit reconnu comme un outil d'administration système, sa véritable puissance réside dans son utilisation combinée avec les événements. Dans cet article, nous vous expliquons TOUT ce que vous devez savoir sur l'utilisation des événements avec PowerShell, en nous basant sur la documentation officielle et des articles techniques spécialisés.

Des journaux système aux événements personnalisés, PowerShell vous permet de capturer, d’analyser et de réagir à tout type d’événement.Nous verrons à la fois le commandes Nous aborderons des exemples simples et avancés utilisant des classes .NET Framework. Nous vous apprendrons également à visualiser les événements, à vous y abonner et à déclencher des actions automatisées en fonction de l'événement capturé. C'est parti !

Types d'événements que vous pouvez gérer dans PowerShell

PowerShell a la capacité de fonctionner avec différents types d'événements, chacune ayant ses propres caractéristiques. Voici les principales :

  • Événements du moteur PowerShell : comme OnIdle (lorsqu'il n'y a aucune activité) et Exiting (lorsque la session est fermée).
  • Événements d'objet .NET Framework : comme la fermeture de processus, la modification de fichiers, etc.
  • Événements WMI et CIM : Idéal pour les scénarios de surveillance plus avancés, disponible depuis PowerShell 3.0.
  • Événements personnalisés : créé avec New-Event pour gérer des contextes spécifiques au sein de vos scripts.

Afficher et travailler avec les journaux avec PowerShell

L’une des méthodes les plus courantes pour travailler avec des événements dans PowerShell consiste à interroger les journaux d’événements Windows.. Vous pouvez y accéder à partir de l'Observateur d'événements graphique (exécutez eventvwr), mais PowerShell vous offre un contrôle beaucoup plus précis avec les applets de commande Get-EventLog y Get-WinEvent. De plus, si vous souhaitez apprendre à détecter des problèmes système spécifiques, vous pouvez consulter Ce diagnostic de l'observateur d'événements dans Windows 11.

  réparer l'écran blanc mort dans Windows 10

Requêtes de base avec Get-EventLog

Cette applet de commande est utile pour travailler avec journaux classiques comme Candidature, Système o Sécurité. Quelques exemples:

  • Lister tous les journaux : Get-EventLog -List
  • Obtenez les 10 derniers événements : Get-EventLog -LogName System -Newest 10
  • Filtrer par type : Get-EventLog -LogName System -EntryType Error
  • Filtrer par message : Get-EventLog -LogName System -Message *dominio*

Requêtes plus avancées avec Get-WinEvent

Pour les bûches modernes ou personnalisées, Get-WinEvent Il est plus puissant. Il accepte les filtres XML, permet de travailler avec des identifiants spécifiques comme 4104 (utilisé pour les scripts PowerShell enregistrés) et d'accéder à des enregistrements comme Microsoft-Windows-PowerShell/Operational.evtx. Si vous souhaitez en savoir plus sur la gestion des journaux et des événements dans Hyper-V, consultez Gérer les journaux et les événements dans Hyper-V.

Par exemple, pour extraire tous les fragments d’un scénario exécuté (événement 4104 avec le même ID ScriptBlock) :

$StoreArrayHere = Get-WinEvent -FilterHashtable @{ Path="C:\SampleEVTX\Microsoft-Windows-PowerShell%4Operational.evtx"; ProviderName="Microsoft-Windows-PowerShell"; Id = 4104 } | Where-Object { $_.Message -like '*51baf005*' }

Vous pouvez trier les fragments et les réunir pour reconstruire le script complet.. Une pratique clé dans l'analyse médico-légale ou les tâches de cybersécurité. Pour plus de détails sur la façon de détecter malware via les journaux, les requêtes types de malwares.

Créer et s'abonner à des événements personnalisés

PowerShell vous permet de créer des événements personnalisés avec New-EventCeci est utile pour générer des événements internes dans des scripts complexes. Vous pouvez vous y abonner en utilisant Register-EngineEvent.

exemple:

Register-EngineEvent -SourceIdentifier MyEvent -Action { Write-Host "Se ha producido el evento personalizado" }
New-Event -SourceIdentifier MyEvent -MessageData "Algo pasó"

Vous pouvez également afficher les événements dans la file d'attente active avec Get-Event et les éliminer avec Remove-EventPour une gestion plus avancée, consultez Remplacer le pare-feu sous Windows.

Abonnez-vous aux événements .NET Framework

Avec Register-ObjectEvent Vous pouvez réagir aux événements des objets .NETPar exemple, vous pouvez détecter quand une application est fermée, un fichier est créé ou un nouveau journal est entré dans le système.

Exemple avec le processus de calculatrice

$calc = ::Start("calc.exe")
Register-ObjectEvent -InputObject $calc -EventName Exited -Action {
    Write-Host "La calculadora se cerró"
}

Exemple avec FileSystemWatcher

$fsw = New-Object System.IO.FileSystemWatcher
$fsw.Path = "C:\Users\Public"
Register-ObjectEvent -InputObject $fsw -EventName Created -Action { Write-Host "Archivo nuevo detectado" }

Exemple avec System.Diagnostics.EventLog

$log = New-Object System.Diagnostics.EventLog
$log.Log = "Security"
Register-ObjectEvent -InputObject $log -EventName EntryWritten -Action { Write-Host "Evento de seguridad escrito" }

Dans ces cas, chaque fois que l'événement surveillé se produit, le bloc d'action sera exécuté automatiquement..

  Collaborer sur des documents Word en ligne : tout ce que vous devez savoir

Événements du moteur PowerShell

Événements PowerShell

Il y en a peu, mais ils sont utiles pour automatiser les tâches courantes :

  • PowerShell.OnIdle : Il est activé lorsqu'il n'y a aucune activité.
  • PowerShell.Sortie : Il est lancé lorsque la console est fermée.

Par exemple, pour enregistrer l’historique des commandes :

Register-EngineEvent -SourceIdentifier PowerShell.Exiting -SupportEvent -Action {
    Get-History | Export-Clixml "$home\ps_history.xml"
}

Ce script peut être inclus dans votre profil PowerShell, et lorsque vous démarrez une nouvelle session, vous pouvez récupérer l'historique avec :

If (Test-Path "$home\ps_history.xml") {
    Add-History -InputObject (Import-Clixml "$home\ps_history.xml")
}

Examiner et gérer les abonnements

Tous les événements et abonnements actifs d'une session peuvent être consultés avec : Get-EventSubscriberPour les annuler, utilisez simplement Unregister-Event.

Par exemple:

Get-EventSubscriber | Unregister-Event

Vous pouvez également utiliser le paramètre -Force si aucun abonnement n'est visible directement.

Automatisation avec événements en arrière-plan ou à distance

PowerShell prend en charge le transfert d’événements à partir de sessions d’arrière-plan ou à distance. Vous y parvenez en utilisant le paramètre -Forward dans les applets de commande d'abonnement.

Exemple avec une tâche en arrière-plan :

Start-Job -ScriptBlock {
    Register-EngineEvent -SourceIdentifier JobEvent -Forward
    New-Event -SourceIdentifier JobEvent -Message "Trabajo terminado"
}

Votre session principale peut capturer et agir sur cet événement..

Applications en cybersécurité et en criminalistique

PowerShell 5.0 a introduit la journalisation des blocs de script (ID d'événement 4104), qui stocke l'intégralité du contenu des scripts exécutés. Ceci est essentiel pour détecter toute activité suspecte.

Si un script est long, il est enregistré sous forme de fragments multiples dans les journaux. Vous pouvez le reconstituer en filtrant par ID de bloc de script et en triant les événements. Il existe également le script. ExtractAllScripts.ps1 Ce qui automatise cette tâche. Grâce à lui, il est possible de combiner des fragments qui survivent à la rotation des journaux et de récupérer une grande partie du contenu exécuté.

Bien que PowerShell ait été critiqué par le passé pour son potentiel malveillant, une fois correctement configuré, il devient un outil essentiel pour se défendre contre les attaques, auditer les modifications et réagir automatiquement aux comportements anormaux. Pour comprendre comment détecter les activités suspectes, consultez la section « Détecter les activités suspectes ». Configurer DHCP et DNS sur Windows Server.

En maîtrisant les événements dans PowerShell, vous pouvez créer des environnements plus sécurisés, plus efficaces et plus automatisés. De la surveillance des processus à la gestion des événements réseau ou de fichiers, la flexibilité de PowerShell est immense. L'essentiel est de comprendre comment s'abonner aux événements pertinents et comment exploiter ces informations pour agir, renforçant ainsi votre réactivité et votre sécurité.

Observateur d'événements Windows Eventvwr
Article connexe:
Diagnostics avancés avec l'Observateur d'événements sous Windows 11 : un guide complet

Laisser un commentaire