Skip to content

Analyse forensique de PSReadLine ConsoleHost_history.txt

Ce qu'enregistre le fichier d'historique PSReadLine, où il se trouve, pourquoi il n'a pas d'horodatage, et comment l'utiliser — et ses limites — en investigation.

Publié le 3 min de lecture

En bref. PSReadLine enregistre chaque commande tapée dans une console interactive dans ConsoleHost_history.txt — une ligne chacune, sans horodatage, par utilisateur, en survivant aux redémarrages. C'est une mine pour ce qu'une personne a tapé, mais il n'enregistre que la saisie interactive en console et donne l'ordre, pas l'heure. Ouvrez le parseur pour le lire à côté des journaux d'événements.

Où il se trouve et ce qu'il contient

PSReadLine (livré d'origine depuis PowerShell 5 / Windows 10) conserve un fichier d'historique à :

C:\Users\<user>\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt

Le nom est <HostName>_history.txt ; ConsoleHost est la console powershell.exe normale. Il ajoute une ligne par commande acceptée. Une commande multiligne est enregistrée avec un accent grave en fin de chaque ligne sauf la dernière ; le parseur les réunit en une seule entrée. Comme il est par utilisateur sous AppData\Roaming, il est attribué au profil dans lequel il se trouve — conservez le chemin Users\<name>\ lors de la collecte. Voir PSReadLine.

Aucun horodatage — seulement l'ordre

Le fichier ne contient aucune heure. Cela a deux conséquences. D'abord, sa chronologie n'est que l'ordre des lignes ; pour situer une commande dans le temps, il faut la corréler à un événement 4104 ou 800 horodaté, ou à une transcription. Ensuite, le fichier persiste à travers redémarrages et ouvertures de session, si bien qu'une ligne peut être plus ancienne de plusieurs semaines ou mois que le plus ancien événement de vos journaux. Traitez-le comme un enregistrement d'intention et de technique, corroboré ailleurs pour la datation.

Limites à énoncer

  • Interactif uniquement. Les commandes lancées depuis un .ps1, une tâche planifiée, WinRM ou un hôte personnalisé autre que la console ne sont pas écrites ici.
  • Contrôlé par l'attaquant. L'historique peut être effacé (Clear-History vide la session ; supprimer ou tronquer le fichier l'élimine entièrement) — le parseur signale les commandes d'effacement d'historique qu'il voit.
  • Pas une preuve de réussite. Il enregistre ce qui a été tapé, y compris les fautes de frappe et les commandes abandonnées, pas ce qui a réussi.

L'utiliser dans un dossier

Chargez le fichier d'historique aux côtés des journaux d'événements et des transcriptions pour qu'une commande tapée s'aligne sur son exécution journalisée. Le parseur décode toute commande encodée sur une ligne d'historique et signale cradles de téléchargement, altération de Defender et d'AMSI, et effacement de journaux. Analysez-le dans votre navigateur.

FAQ

Où se trouve le fichier d'historique PowerShell ?

PSReadLine l'écrit dans C:\Users\<user>\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt, un par utilisateur. Les autres hôtes utilisent <HostName>_history.txt.

Comporte-t-il des horodatages ?

Non. PSReadLine ajoute une ligne par commande, sans heure. L'ordre des lignes est la seule chronologie, et le fichier peut être bien plus ancien que les journaux d'événements.

Que capture-t-il ?

Uniquement la saisie interactive tapée dans une console hôte, par utilisateur, à travers les sessions et les redémarrages. Il ne capture ni les scripts, ni les tâches planifiées, ni les runspaces non-console.

Articles connexes

Pas à pas : ouvrir les journaux .evtx PowerShell, l'historique PSReadLine et les transcriptions dans une visionneuse gratuite en navigateur, reconstituer les blocs de script, décoder les commandes encodées et exporter en CSV ou JSON.
Structure des transcriptions PowerShell, contenu de l'en-tête, fonctionnement des horodatages de commandes avec -IncludeInvocationHeader, et comment les investiguer.
Fonctionnement de -EncodedCommand et de l'obfuscation PowerShell courante — base64/UTF-16LE, gzip/deflate, codes de caractères, concaténation, opérateur de format et accents graves — et comment les décoder en toute sécurité.