DTLsaysWhat — Manuel de référence

version1.0 plateformeWindows uniquement scriptDTLsaysWhat.py

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 :

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égorieDescription
allExécute toutes les catégories séquentiellement
systemIdentification du système d'exploitation, version, architecture, uptime, fuseau horaire
hardwareProcesseur, carte mère, BIOS/UEFI
memoryTotaux RAM, mémoire virtuelle, barrettes physiques (slots DIMM)
diskDisques physiques et volumes logiques
gpuCartes graphiques, VRAM, résolution courante, version du pilote
networkInterfaces réseau, adresses IP, table de routage, DNS, connexions TCP actives, partages SMB, lecteurs mappés, paramètres proxy
softwareApplications installées (depuis le registre), paquets AppX/Store
servicesServices en cours d'exécution, services arrêtés avec démarrage automatique
processesTous les processus en cours avec PID, utilisation RAM, temps CPU
startupEntré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
updatesMises à jour et correctifs Windows installés (numéros KB)
driversPilotes PnP signés avec version et fabricant
usersComptes locaux, profils utilisateurs, utilisateur de session courante et statut administrateur
tasksTâches planifiées actives (non désactivées) hors espace de noms Microsoft
sharesPartages SMB locaux et lecteurs réseau mappés
events20 dernières erreurs et avertissements des journaux Système et Application
perfCharge CPU instantanée par cœur, utilisation mémoire, utilisation disque par volume
virtDé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.

Si --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

Requêtes WMI

Win32_ComputerSystem, Win32_ComputerSystemProduct, Win32_SystemEnclosure, Win32_OperatingSystem, Win32_TimeZone

Champs rapportés

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

Requêtes WMI

Win32_Processor, Win32_BaseBoard, Win32_BIOS

Champs rapportés

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

Requêtes WMI

Win32_OperatingSystem, Win32_PhysicalMemory

Champs rapportés

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

Requêtes WMI

Win32_DiskDrive, Win32_LogicalDisk

Champs rapportés

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

Requêtes WMI

Win32_VideoController

Champs rapportés

Nom de l'adaptateur, fabricant, VRAM, résolution horizontale et verticale courante, taux de rafraîchissement, version et date du pilote, statut.

network

Sources de données

psutil (net_if_addrs, net_if_stats, net_connections), ipconfig /all, route print, net share, net use, Registre Windows

Champs rapportés

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

Sources de données

Registre Windows (clés Uninstall de HKLM et HKCU, incluant Wow6432Node pour les applications 32 bits), PowerShell Get-AppxPackage

Champs rapportés

Applications installées triées alphabétiquement (nom, version, éditeur) ; nombre total d'applications ; liste des paquets AppX/Store (nom, version).

services

Requêtes WMI

Win32_Service

Champs rapportés

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

Source de données

psutil process_iter

Champs rapportés

Par processus : nom, PID, utilisation mémoire RSS, temps CPU total (utilisateur + système, en secondes). Trié alphabétiquement par nom de processus.

startup

Sources de données

WMI Win32_StartupCommand, clés Run du Registre Windows

Champs rapportés

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

Sources de données

PowerShell Get-MpComputerStatus, Get-NetFirewallProfile, Get-BitLockerVolume, Confirm-SecureBootUEFI, Get-Tpm

Champs rapportés

É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

Requêtes WMI

Win32_QuickFixEngineering

Champs rapportés

Par correctif : identifiant KB, date d'installation, compte installateur, description. Trié par date d'installation, le plus récent en premier.

drivers

Requêtes WMI

Win32_PnPSignedDriver

Champs rapportés

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

Sources de données

PowerShell Get-LocalUser, WMI Win32_UserProfile, variables d'environnement (USERNAME, USERDOMAIN), API Windows IsUserAnAdmin

Champs rapportés

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

Source de données

PowerShell Get-ScheduledTask

Champs rapportés

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.

shares

Requêtes WMI

Win32_Share, Win32_NetworkConnection

Champs rapportés

Partages SMB locaux (nom, chemin, description) ; lecteurs réseau mappés (lettre de lecteur locale, chemin UNC distant, état de la connexion).

events

Source de données

PowerShell Get-EventLog

Champs rapportés

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

Source de données

psutil (cpu_percent, virtual_memory, swap_memory, disk_partitions, disk_usage)

Champs rapportés

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

Sources de données

WMI Win32_ComputerSystem, Win32_BIOS ; PowerShell Get-WindowsOptionalFeature, Get-VM ; wsl --list --verbose

Champs rapportés

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