DTLsaysWhat — Manuel de référence
Présentation
DTLsaysWhat est un outil d'inventaire système Windows écrit en Python, inspiré de l'utilitaire interne WHAT développé par Stanley Rabinowitz pour les systèmes DEC VAX/VMS dans les années 80. Il collecte des informations détaillées sur la machine Windows locale ou distante, réparties en jusqu'à 20 catégories fonctionnelles, et produit automatiquement un rapport texte et un rapport HTML navigable, tous deux enregistrés sur disque à l'issue de chaque exécution.
Prérequis
Dépendances Python
Les paquets tiers suivants doivent être installés avant utilisation :
pip install wmi pywin32 psutil
Les modules de la bibliothèque standard utilisés (argparse, ctypes, datetime, io, os, socket, subprocess, sys, winreg) ne nécessitent aucune installation supplémentaire.
Privilèges
Certaines catégories (Sécurité, BitLocker, Hyper-V, TPM, Démarrage sécurisé, Tâches planifiées, Pare-feu) peuvent nécessiter l'exécution du script avec des privilèges élevés (Exécuter en tant qu'administrateur). Sans élévation, ces sections peuvent ne retourner que des données partielles ou aucune donnée.
Encodage
Sur les systèmes Windows en français, cmd.exe utilise par défaut la page de codes OEM 850. L'outil détecte et gère ce cas automatiquement. Pour garantir l'affichage correct des caractères accentués, il est recommandé soit :
- d'invoquer le script avec
python -X utf8 DTLsaysWhat.py, ou - de définir la variable d'environnement
PYTHONUTF8=1avant l'exécution.
Syntaxe de la commande
python DTLsaysWhat.py [CATÉGORIE] [--output FICHIER] [--computer NOM_OU_IP]
Tous les arguments sont optionnels. Sans argument, l'outil utilise par défaut la catégorie system et cible la machine locale.
Arguments
Argument positionnel : CATÉGORIE
Indique la catégorie d'inventaire à collecter. Si omis, la valeur par défaut est system.
| Catégorie | Description |
|---|---|
| all | Exécute toutes les catégories séquentiellement |
| system | Identification du système d'exploitation, version, architecture, uptime, fuseau horaire |
| hardware | Processeur, carte mère, BIOS/UEFI |
| memory | Totaux RAM, mémoire virtuelle, barrettes physiques (slots DIMM) |
| disk | Disques physiques et volumes logiques |
| gpu | Cartes graphiques, VRAM, résolution courante, version du pilote |
| network | Interfaces réseau, adresses IP, table de routage, DNS, connexions TCP actives, partages SMB, lecteurs mappés, paramètres proxy |
| software | Applications installées (depuis le registre), paquets AppX/Store |
| services | Services en cours d'exécution, services arrêtés avec démarrage automatique |
| processes | Tous les processus en cours avec PID, utilisation RAM, temps CPU |
| startup | Entrées de démarrage WMI et clés Run du registre HKLM/HKCU |
| security | État de Windows Defender, profils pare-feu, BitLocker, Démarrage sécurisé, TPM |
| updates | Mises à jour et correctifs Windows installés (numéros KB) |
| drivers | Pilotes PnP signés avec version et fabricant |
| users | Comptes locaux, profils utilisateurs, utilisateur de session courante et statut administrateur |
| tasks | Tâches planifiées actives (non désactivées) hors espace de noms Microsoft |
| shares | Partages SMB locaux et lecteurs réseau mappés |
| events | 20 dernières erreurs et avertissements des journaux Système et Application |
| perf | Charge CPU instantanée par cœur, utilisation mémoire, utilisation disque par volume |
| virt | Détection de VM (VMware, VirtualBox, Hyper-V, QEMU, KVM, Xen), état du rôle Hyper-V, VMs hébergées, distributions WSL |
Option : --output FICHIER forme courte : -o FICHIER
Spécifie le chemin et le nom du fichier texte de sortie. Si cette option est omise, l'outil génère automatiquement un nom de fichier selon le format :
DTLsaysWhat_<HOSTNAME>_<YYYYMMDD_HHMMSS>.txt
Le fichier est enregistré dans le répertoire de travail courant.
Option : --computer NOM_OU_IP
Spécifie la machine cible pour la collecte de données. Accepte un nom NetBIOS ou une adresse IP. Par défaut, cible le nom d'hôte de la machine locale. La collecte distante repose sur WMI et nécessite les droits d'accès réseau appropriés sur la machine cible.
Fichiers de sortie
Chaque exécution produit automatiquement deux fichiers :
Rapport texte (.txt) : Fichier texte UTF-8 brut contenant l'intégralité de la sortie console, structuré par en-têtes de section et séparateurs de sous-section.
Rapport HTML (.html) : Fichier HTML autonome avec une esthétique terminal sombre (vert sur noir, police monospace). Il inclut une barre de navigation latérale fixe à gauche avec liens vers chaque section principale, facilitant la navigation dans les rapports volumineux. Les deux fichiers partagent le même nom de base, à l'extension près.
--output est spécifié comme rapport.txt, le fichier HTML est enregistré sous rapport.html. Si le chemin de sortie ne se termine pas par .txt, l'extension .html est ajoutée au chemin complet.Sources de données
L'outil collecte les données via cinq mécanismes complémentaires :
WMI (Windows Management Instrumentation) : Utilisé pour la majorité des données matérielles, système d'exploitation, logiciels, services, pilotes, mises à jour et utilisateurs. Les requêtes WMI peuvent cibler une machine distante lorsque --computer est spécifié.
Applets de commande PowerShell : Utilisées pour les catégories sans équivalent WMI direct ou lorsque PowerShell fournit une sortie plus riche. Catégories concernées : security, users, tasks, software (paquets AppX), events, virt. PowerShell est invoqué avec l'encodage de sortie UTF-8 imposé.
Commandes natives Windows : Utilisées de manière sélective dans la catégorie network : ipconfig /all pour les passerelles et les DNS, route print pour la table de routage, net share et net use pour les partages SMB et les lecteurs mappés.
Registre Windows : Utilisé pour les paramètres proxy (HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings), les entrées de démarrage (HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run, HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run) et la détection de la page de codes OEM.
psutil : Utilisé pour l'énumération des processus en temps réel, les statistiques des interfaces réseau, les connexions TCP actives et les métriques de performance instantanées (CPU par cœur, mémoire, utilisation disque).
Catégories : données collectées
system
Win32_ComputerSystem, Win32_ComputerSystemProduct, Win32_SystemEnclosure, Win32_OperatingSystem, Win32_TimeZone
Nom de la machine, domaine ou groupe de travail, fabricant, modèle, numéro de série, UUID, type de châssis, libellé du système d'exploitation, version et numéro de build, architecture, répertoire Windows, date d'installation, dernier démarrage, uptime calculé, fuseau horaire.
hardware
Win32_Processor, Win32_BaseBoard, Win32_BIOS
Nom du processeur, fabricant, nombre de cœurs physiques et logiques, fréquence de base, désignation du socket, architecture, tailles des caches L2 et L3 ; fabricant de la carte mère, nom du produit, version, numéro de série ; fabricant du BIOS/UEFI, version SMBIOS, date de publication.
memory
Win32_OperatingSystem, Win32_PhysicalMemory
RAM physique totale et disponible, mémoire virtuelle totale et libre ; par barrette (slot DIMM) : étiquette de banque, capacité, vitesse (MHz), type de mémoire (génération DDR), fabricant, numéro de série ; nombre total de barrettes.
disk
Win32_DiskDrive, Win32_LogicalDisk
Par disque physique : index, modèle, taille, type d'interface, nombre de partitions, numéro de série, statut ; par volume logique : lettre de lecteur, type (amovible/fixe/réseau/CD/RAM), système de fichiers, taille totale, espace libre, étiquette de volume.
gpu
Win32_VideoController
Nom de l'adaptateur, fabricant, VRAM, résolution horizontale et verticale courante, taux de rafraîchissement, version et date du pilote, statut.
network
psutil (net_if_addrs, net_if_stats, net_connections), ipconfig /all, route print, net share, net use, Registre Windows
Par interface : nom, état (actif/inactif), vitesse de liaison, adresses IPv4/IPv6/MAC ; passerelles par défaut ; serveurs DNS configurés ; table de routage complète ; connexions TCP établies (adresse et port local et distant) ; partages SMB locaux ; lecteurs réseau mappés ; configuration proxy (activé/désactivé, adresse du serveur).
software
Registre Windows (clés Uninstall de HKLM et HKCU, incluant Wow6432Node pour les applications 32 bits), PowerShell Get-AppxPackage
Applications installées triées alphabétiquement (nom, version, éditeur) ; nombre total d'applications ; liste des paquets AppX/Store (nom, version).
services
Win32_Service
Tous les services actuellement en cours d'exécution (nom d'affichage, mode de démarrage) ; tous les services arrêtés avec un mode de démarrage Automatique (nom d'affichage, état courant).
processes
psutil process_iter
Par processus : nom, PID, utilisation mémoire RSS, temps CPU total (utilisateur + système, en secondes). Trié alphabétiquement par nom de processus.
startup
WMI Win32_StartupCommand, clés Run du Registre Windows
Entrées de démarrage WMI (nom, utilisateur associé, ligne de commande) ; entrées Run de HKLM (nom de valeur, commande) ; entrées Run de HKCU (nom de valeur, commande).
security
PowerShell Get-MpComputerStatus, Get-NetFirewallProfile, Get-BitLockerVolume, Confirm-SecureBootUEFI, Get-Tpm
État de Windows Defender (activé, version des signatures, date des signatures, protection en temps réel, antispyware) ; par profil pare-feu (domaine/privé/public) : état d'activation, actions entrante et sortante par défaut ; état BitLocker par volume (point de montage, état du volume, état de la protection) ; état du Démarrage sécurisé ; propriétés du TPM.
updates
Win32_QuickFixEngineering
Par correctif : identifiant KB, date d'installation, compte installateur, description. Trié par date d'installation, le plus récent en premier.
drivers
Win32_PnPSignedDriver
Par pilote : nom du périphérique, version du pilote, fabricant. Trié alphabétiquement par nom de périphérique. Seules les entrées avec un nom de périphérique non vide sont incluses.
users
PowerShell Get-LocalUser, WMI Win32_UserProfile, variables d'environnement (USERNAME, USERDOMAIN), API Windows IsUserAnAdmin
Comptes locaux (nom, état d'activation, dernière ouverture de session) ; profils utilisateurs (chemin local, état chargé), à l'exclusion des profils système spéciaux ; utilisateur de la session courante (domaine et nom de compte, statut administrateur).
tasks
PowerShell Get-ScheduledTask
Tâches planifiées non désactivées hors de l'espace de noms \Microsoft\* (chemin de la tâche, nom de la tâche, état). Trié par chemin de tâche.
events
PowerShell Get-EventLog
20 dernières erreurs et avertissements du journal Système, puis du journal Application. Par entrée : horodatage, type (Erreur/Avertissement), ID d'événement, texte du message.
perf
psutil (cpu_percent, virtual_memory, swap_memory, disk_partitions, disk_usage)
Pourcentage d'utilisation CPU par cœur logique (échantillon d'1 seconde) ; charge CPU globale ; mémoire physique totale, utilisée et disponible avec pourcentage ; swap total et utilisé ; par volume monté : espace utilisé et total avec pourcentage et type de système de fichiers. Les volumes avec erreurs d'accès sont signalés.
virt
WMI Win32_ComputerSystem, Win32_BIOS ; PowerShell Get-WindowsOptionalFeature, Get-VM ; wsl --list --verbose
Résultat de la détection de VM basé sur les chaînes de modèle, fabricant et version BIOS (vérifiées contre VMware, VirtualBox, Hyper-V, VBOX, QEMU, KVM, Xen, Microsoft Corporation) ; état de la fonctionnalité Windows Hyper-V ; liste des VMs hébergées si le rôle Hyper-V est actif (nom, état, mémoire assignée, génération) ; liste des distributions WSL.
Comportement à la sortie
L'outil écrit toujours les fichiers de sortie avant de se terminer, quelle que soit la catégorie. En cas d'échec d'écriture vers le chemin spécifié ou généré automatiquement (erreur de permission, chemin invalide), un message d'erreur est affiché dans la console et le fichier concerné est ignoré. L'autre fichier de sortie (texte ou HTML) est tout de même tenté indépendamment.
Limitations connues
- L'outil est strictement réservé à Windows. Il importe
wmi,winreget appelle des API spécifiques à Windows ; il ne fonctionnera pas sous Linux ou macOS. - L'accès WMI distant (
--computer) ne s'étend pas aux sous-sections basées sur PowerShell (security,users,tasks,softwareAppX,events,virt), qui interrogent toujours la machine locale. - Certaines sections nécessitent des privilèges administrateur. L'exécution sans élévation ne produit aucune erreur pour ces sections ; la sortie de la sous-section concernée sera simplement vide ou contiendra un message « non disponible ».
- La catégorie
perffournit uniquement un instantané. Les pourcentages CPU sont échantillonnés sur un intervalle d'1 seconde par appel ; il n'existe pas de mode de surveillance en continu. - La catégorie
eventsrécupère les 20 erreurs et avertissements les plus récents sans limite de date ; le libellé « 24 dernières heures » présent dans l'en-tête de section est une indication d'intention, non un filtre appliqué à la requête.