Analyse forensique de la transcription PowerShell
Structure des transcriptions PowerShell, contenu de l'en-tête, fonctionnement des horodatages de commandes avec -IncludeInvocationHeader, et comment les investiguer.
En bref. Une transcription est un enregistrement texte d'une session PowerShell entière — entrées et sorties — écrit par Start-Transcript ou la stratégie de transcription dans PowerShell_transcript.<computer>.<random>.<timestamp>.txt. L'en-tête porte l'heure de début, l'utilisateur, la machine, l'application hôte et le PID ; avec -IncludeInvocationHeader, chaque commande a sa propre heure de début. Toutes les heures sont celles de l'horloge locale de l'hôte. Ouvrez le parseur pour lire sessions et commandes en chronologie.
Structure
La transcription est activée par Start-Transcript ou par la stratégie de groupe (« Activer la transcription PowerShell »), qui peut l'imposer à chaque session et définir un OutputDirectory (Microsoft : about_Logging_Windows). Un fichier commence par un en-tête entre des lignes d'astérisques :
**********************
Windows PowerShell transcript start
Start time: 20260914104500
Username: FIN-WKS-07\svc_backup
Machine: FIN-WKS-07 (Microsoft Windows NT 10.0.19045.0)
Host Application: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Process ID: 4242
PSVersion: 5.1.19041.4648
**********************
Ensuite, chaque ligne d'invite (PS C:\Users\svc_backup>) est suivie de la commande et de sa sortie. Avec -IncludeInvocationHeader, un bloc Command start time: précède chaque commande — le parseur attache cette heure à la commande ; sans lui, les commandes héritent de l'heure de début de session (indiquée comme approximative). Voir transcription PowerShell.
Heure locale, sans fuseau
Chaque horodatage d'une transcription — Start time, End time, Command start time — est l'horloge locale de l'hôte, au format yyyyMMddHHmmss, sans fuseau. Lorsque vous corrélez une transcription avec les journaux d'événements en UTC, vous devez connaître le fuseau horaire de la machine. Le parseur affiche les heures de transcription comme locales (étiquetées) et ne les convertit jamais silencieusement.
Ce qu'ajoutent les transcriptions
Contrairement aux journaux d'événements, une transcription capture la sortie : vous voyez donc ce qu'une commande a renvoyé — un listage de répertoire, le contenu d'un fichier, une erreur. Ce contexte tranche souvent la question de la réussite d'une action. Le parseur décode toute commande encodée d'une ligne de transcription et signale cradles et altérations, et lit les fichiers multi-sessions (un fichier peut contenir plusieurs paires transcript start/transcript end). Un transcript end manquant signifie que la session a été interrompue ou que le fichier est tronqué — le parseur vous en avertit.
Lisez les transcriptions à côté de l'historique PSReadLine et des journaux ; analysez l'ensemble dans votre navigateur.
FAQ
Où les transcriptions PowerShell sont-elles enregistrées ?
Par défaut dans le dossier Documents de l'utilisateur, sous PowerShell_transcript.<computer>.<random>.<timestamp>.txt, ou dans l'OutputDirectory défini par la stratégie de transcription. Chaque session est un fichier.
Les transcriptions ont-elles des horodatages ?
L'en-tête a une heure de début et de fin, et avec -IncludeInvocationHeader chaque commande reçoit une Command start time. Toutes les heures sont celles de l'horloge locale de l'hôte, sans fuseau enregistré.
Que contient une transcription que les journaux n'ont pas ?
Les entrées ET les sorties complètes d'une session telles que l'utilisateur les a vues, y compris les résultats des commandes — un contexte que les journaux d'événements ne capturent pas.