Fin de partie pour WMIC : Migration obligatoire vers PowerShell et WMI/CIM dans Windows 11 24H2
L'outil wmic.exe n'est plus présent dans les dernières versions de Windows 11 (24H2 et 25H2) et ne peut plus être réactivé via les fonctionnalités facultatives. Les administrateurs systèmes et consultants IT doivent impérativement migrer leurs scripts d'automatisation, de détection et de gestion vers les cmdlets PowerShell natifs ou les interfaces CIM/WMI modernes pour garantir la pérennité de leurs environnements.
En bref
- Suppression définitive :
wmic.exeest absent des images d'installation de Windows 11 24H2 et 25H2, ainsi que des builds récents de Windows Insider. - Pas de retour possible : Contrairement aux précédentes versions où l'on pouvait réactiver WMIC via Désactiver une fonctionnalité Windows, cette option n'existe plus.
- Migration obligatoire : Tous les scripts batch, PowerShell ou outils tiers dépendant de
wmicéchoueront sur les systèmes récents. - Alternative native : Les cmdlets
Get-CimInstance,Get-WmiObject(déprécié mais encore supporté) et les applets PowerShell spécifiques prennent le relais. - Impact immédiat : Les outils de gestion d'actifs, les scripts de déploiement et les solutions de monitoring basées sur WMI doivent être audités et refacturés.
Pourquoi Microsoft a-t-il retiré WMIC ?
wmic.exe (Windows Management Instrumentation Command Line) était un outil en ligne de commande développé initialement pour simplifier l'accès aux données système via l'interface WMI. Cependant, il s'agissait d'une interface "legacy" basée sur COM, offrant une syntaxe rigide, une gestion des erreurs primitive et une intégration faible avec le pipeline PowerShell.
Microsoft a progressivement déprécié cet outil au profit de PowerShell, qui offre un modèle d'objets riche, une syntaxe cohérente et une capacité de scripting supérieure. Avec l'arrivée de Windows 11 24H2, cette transition est devenue irréversible. La suppression de wmic.exe vise à :
- Alléger l'image système : Réduire la surface d'attaque et le poids des composants inutiles.
- Unifier le support : Orienter tous les administrateurs vers un seul outil de gestion standardisé (PowerShell).
- Améliorer la sécurité : Éliminer un binaire connu pour avoir été exploité dans le passé et dont la maintenance était devenue coûteuse.
Il est important de noter que ce n'est pas la technologie WMI (Windows Management Instrumentation) qui disparaît, mais l'interface en ligne de commande wmic.exe. Le moteur WMI reste actif dans le système et est accessible via les API .NET, les cmdlets PowerShell et les interfaces graphiques modernes.
Audit de vos dépendances actuelles
Avant de passer à la migration, il est crucial d'identifier où wmic est utilisé dans votre infrastructure. Les zones de risque principales incluent :
- Scripts de déploiement (GPO, SCCM/MECM, Intune) : Beaucoup de scripts de prérequis ou de configuration utilisent
wmicpour vérifier des versions de logiciels ou des propriétés matérielles. - Outils de monitoring et d'inventaire : Des solutions tierces (GLPI, Snipe-IT, custom scripts) qui pollent les agents via WMI.
- Scripts d'administration courants : Gestion des services, des démarrages automatiques, des volumes de disque, des cartes réseau.
Comment détecter les utilisations ?
Vous pouvez lancer une recherche globale sur vos postes de travail ou serveurs (via PowerShell) pour identifier les appels à wmic :
# Recherche dans le registre des clés de démarrage utilisant WMIC
Get-ItemProperty "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run", `
"HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -ErrorAction SilentlyContinue | `
Where-Object { $_.PSObject.Properties.Value -match "wmic" }
# Recherche dans les tâches planifiées
Get-ScheduledTask | ForEach-Object {
if ($_.Actions.Execute -match "wmic" -or $_.Actions.Arguments -match "wmic") {
[PSCustomObject]@{
TaskName = $_.TaskName
Execute = $_.Actions.Execute
Arguments= $_.Actions.Arguments
}
}
}
Migration pratique : De WMIC vers PowerShell
La migration n'est pas une simple traduction de commandes, mais souvent une optimisation. Voici les équivalences les plus courantes et leurs implémentations modernes.
1. Récupérer des informations système (OS, CPU, RAM)
Ancienne commande WMIC :
wmic os get caption,version,buildnumber
wmic cpu get name,NumberOfCores
wmic memorychip get capacity
Nouvelle approche PowerShell (CIM) :
L'utilisation de Get-CimInstance est préférée à Get-WmiObject car elle est plus performante et fonctionne mieux avec les sessions distantes (WinRM).
# Informations OS
Get-CimInstance -ClassName Win32_OperatingSystem | Select-Object Caption, Version, BuildNumber
# Informations CPU
Get-CimInstance -ClassName Win32_Processor | Select-Object Name, NumberOfCores
# Mémoire totale (en Mo)
Get-CimInstance -ClassName Win32_ComputerSystem | Select-Object @{N='TotalRAM_Mo';E={$_.TotalPhysicalMemory / 1MB}}
2. Gestion des services
Ancienne commande WMIC :
wmic service where name="Spooler" stop
wmic service where name="Spooler" start
Nouvelle approche PowerShell :
Les cmdlets de service natifs (Get-Service, Start-Service, Stop-Service) sont plus robustes et gèrent mieux les erreurs.
# Arrêter un service
Stop-Service -Name "Spooler" -Force
# Démarrer un service
Start-Service -Name "Spooler"
# Vérifier l'état
Get-Service -Name "Spooler" | Select-Object Name, Status
3. Gestion des processus
Ancienne commande WMIC :
wmic process where name="explorer.exe" call terminate
Nouvelle approche PowerShell :
Stop-Process est l'équivalent direct et plus sûr.
# Tuer un processus spécifique
Stop-Process -Name "explorer" -Force
# Lister les processus avec plus de détails
Get-Process | Select-Object Name, Id, CPU, WorkingSet
4. Gestion des volumes de disque
Ancienne commande WMIC :
wmic logicaldisk get caption,size,freespace
Nouvelle approche PowerShell :
Get-PSDrive ou Get-CimInstance avec Win32_LogicalDisk.
# Méthode moderne via CIM
Get-CimInstance -ClassName Win32_LogicalDisk -Filter "DriveType=3" | `
Select-Object DeviceID, @{N='TotalMo';E={$_.Size/1MB}}, @{N='FreeMo';E={$_.FreeSpace/1MB}}
# Alternative plus simple (mais moins détaillée)
Get-PSDrive -PSProvider FileSystem | Select-Object Name, Used, Free
5. Création de fichiers et écriture dans le registre
WMIC permettait d'exécuter des commandes système, mais pour manipuler le système de fichiers ou le registre, PowerShell est infiniment supérieur.
Exemple de création d'un fichier de log :
# Au lieu de : wmic os get ... > c:\logs\os.txt
Get-CimInstance -ClassName Win32_OperatingSystem | Export-Csv -Path "C:\Logs\OS_Info.csv" -NoTypeInformation
Bonnes pratiques pour consultants IT
Face à cette disparition, les consultants doivent adopter une approche proactive pour éviter les pannes en production.
-
Privilégiez
Get-CimInstanceàGet-WmiObject: Bien queGet-WmiObjectfonctionne encore, il est officiellement déprécié.Get-CimInstanceutilise le protocole CIM (Common Information Model), qui est plus moderne, plus rapide pour les requêtes distantes et mieux intégré dans l'écosystème Windows 10/11 et Server 2016+. -
Standardisez vos scripts sur PowerShell 7+ : Assurez-vous que vos scripts utilisent des syntaxes compatibles avec les versions récentes de PowerShell. Évitez les dépendances à des modules obsolètes.
-
Testez sur des machines "nettes" : Avant de déployer un script dans votre parc, testez-le sur une machine virtuelle ou un poste de test exécutant Windows 11 24H2. La présence de
wmic.exesur d'anciennes versions (Windows 10, Windows 11 22H2) peut masquer les erreurs. -
Mettez à jour vos outils tiers : Vérifiez que vos outils de gestion (inventaire, patch management) sont à jour. La plupart des éditeurs (Microsoft, Dell, HP, Lenovo) ont déjà publié des mises à jour de leurs agents pour supporter la fin de WMIC. Si un outil tiers n'est pas mis à jour, il faut soit le remplacer, soit écrire un script de contournement en PowerShell.
-
Documentez la migration : Créez une base de connaissances interne avec les équivalences WMIC -> PowerShell pour votre équipe. C'est un excellent moyen de former les juniors aux bonnes pratiques PowerShell.
-
Utilisez les profils de sécurité : Lors de l'exécution de scripts PowerShell via WinRM, assurez-vous d'utiliser des comptes de service avec les moindres privilèges nécessaires. L'outil
wmicpermettait parfois d'exécuter des actions sans authentification stricte selon la configuration de la politique de groupe ; PowerShell via WinRM impose une authentification plus stricte, ce qui est une bonne chose pour la sécurité.
Points clés
- WMIC est mort : Ne comptez plus sur
wmic.exepour aucune tâche d'administration sur Windows 11 24H2/25H2. - PowerShell est la norme : Il est plus puissant, plus flexible et est le support officiel de Microsoft pour l'automatisation système.
- CIM est la technologie sous-jacente : Les cmdlets
Get-CimInstancesont l'interface moderne pour accéder aux données WMI. - L'action est immédiate : Si vous avez des scripts critiques utilisant WMIC, planifiez leur refonte dès maintenant. Les mises à jour majeures de Windows sont déployées progressivement ; vous n'aurez pas le temps de réagir en urgence.
- La sécurité s'en trouve renforcée : L'abandon d'un outil legacy réduit la surface d'attaque et impose des mécanismes d'authentification plus robustes (WinRM) pour la gestion à distance.
En résumé, la disparition de WMIC n'est pas une perte, mais une opportunité de moderniser vos scripts d'administration. En passant à PowerShell et CIM, vous gagnez en performance, en lisibilité du code et en sécurité. C'est le moment idéal pour purger vos scripts legacy et adopter les standards actuels de l'administration Windows.
Source : IT Connect