Microsoft-Windows-PowerShell%4Operational.evtx C:\Windows\System32\winevt\Logs\Microsoft-Windows-PowerShell%4Operational.evtx
PowerShell%4Operational.evtx : journal du contenu exécuté par Windows PowerShell (blocs de script 4104, modules 4103). La source pour savoir quel code a tourné.
À quoi ça sert
Microsoft-Windows-PowerShell/Operational est le journal qui répond à « quel code PowerShell s’est exécuté sur cette machine ? ». Il complète le journal Sécurité (qui voit les processus, pas le script) et l’historique de la console. Son voisin Windows PowerShell.evtx ne trace que le cycle de vie du moteur, sans le contenu : c’est ici qu’on lit les scripts. PowerShell 7 écrit dans un journal distinct, PowerShellCore/Operational.
Ce qu’il contient
- Événements 4104 : le texte des blocs de script exécutés. Un script long est découpé en plusieurs événements. PowerShell journalise automatiquement, au niveau Avertissement, certains blocs qu’il juge suspects, même si la fonctionnalité n’est pas activée.
- Événements 4103 : exécution de pipeline et liaison des paramètres, si la journalisation des modules est activée.
- Événements 4100 (erreurs d’exécution), 4105 et 4106 (début et fin de chaque bloc, s’ils sont activés), 40961 et 40962 (démarrage de la console).
La journalisation complète s’active par stratégie de groupe : « Activer la journalisation des blocs de script PowerShell » et « Activer la journalisation des modules ». La transcription est un mécanisme distinct, qui produit des fichiers texte.
Risques et bonnes pratiques
- Les scripts contiennent souvent des mots de passe, des jetons ou des noms de serveurs écrits en clair : traitez le journal et ses copies comme sensibles.
- Il sert de preuve en investigation. Envoyez-le vers un SIEM ou une collecte d’événements avant toute purge, et relevez sa taille maximale si la journalisation des blocs est active.
- Pas d’événement ne veut pas dire pas d’activité : vérifiez d’abord que la stratégie est bien appliquée.
Commandes utiles
# Derniers blocs de script journalisés (en administrateur)Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-PowerShell/Operational'; Id=4104} -MaxEvents 20 | Select-Object TimeCreated, Id, LevelDisplayName, Message
# Chercher des motifs d'obfuscation ou de téléchargement courantsGet-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-PowerShell/Operational'; Id=4104} | Where-Object { $_.Message -match 'FromBase64String|DownloadString|Invoke-Expression' } | Select-Object -First 20 TimeCreated, Message
# La journalisation des blocs est-elle imposée par stratégie ?Get-ItemProperty 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging' -ErrorAction SilentlyContinue
# Configuration du journal (taille, rétention, état)wevtutil gl "Microsoft-Windows-PowerShell/Operational"Format
Fichier XML binaire (.evtx). Le « / » du nom du journal devient « %4 » dans le nom du fichier.
Rotation et archivage
La taille maximale et le comportement à saturation (écrasement des plus anciens, ou archivage) se règlent dans les propriétés du journal ou par stratégie de groupe. wevtutil epl exporte le journal en .evtx pour l’archiver.
Comment le lire
Observateur d’événements > Journaux des applications et des services > Microsoft > Windows > PowerShell > Opérationnel. Filtrez par identifiant (4104, 4103) ou cherchez un mot-clé dans le texte avec Get-WinEvent puis Where-Object { $_.Message -match 'motif' }.