CIM / WMI
Pour administrer un poste Windows localement ou à distance, PowerShell s’appuie souvent sur CIM et WMI pour interroger les ressources du système.
Objectifs
À la fin de ce chapitre, vous serez capable de :
- Expliquer la différence entre CIM et WMI et pourquoi privilégier CIM.
- Interroger des informations système via Get-CimClass et Get-CimInstance.
- Utiliser des filtres et des requêtes (WQL) pour cibler les données.
Définition
CIM et WMI permettent de collecter des informations sur les ressources d’un ordinateur Windows local ou distant, par exemple la liste des utilisateurs, les services installés ou le nombre de cartes réseau. WMI correspond à l’implémentation de Microsoft fondée sur le standard CIM, qui définit un modèle commun pour représenter les informations de gestion système.
Le standard CIM a été défini par la DMTF (Distributed Management Task Force), un organisme industriel qui élabore des standards ouverts de gestion et d’interopérabilité pour les infrastructures informatiques.
La différence importante entre WMI et l’usage moderne des cmdlets CIM en PowerShell concerne surtout la communication à distance. Les cmdlets CIM utilisent par défaut WS-Man pour les connexions distantes, ce qui facilite souvent l’administration sur un réseau local, tandis que DCOM reste également possible dans certains cas.
Les avantages de CIM
Les avantages de CIM sur WMI sont :
- meilleures interopérabilité (Linux)
- facilitation de l'utilisation dans un LAN (pas de blocages sur les firewalls)
- compatible avec les systèmes Windows avant la version 3 avec RPC/DCOM
Les acronymes sont :
- WMI : Windows Management Instrumentation
- CIM : Common Interface Model
CIM permet la gestion de système Linux avec un framework comme OMI = Open Management Infrastructure (Microsoft) ou OpenPegasus (OpenGroup).
Il est préférable d'utiliser les commandes CIM que WMI, pour des systèmes à partir de Windows 7 SP1/Windows 8 et Server 2008R2 SP1/Server 2012.
CIM est disponible à partie de la version 3.0 de PowerShell, avant cela seul WMI était disponible. Dans des versions prochaines, PowerShell supprimera les cmdlets WMI.
Info
Dans ce cours, nous allons donc utiliser exclusivement les commandes CIM et le CIM Explorer. Les classes WMI sont toujours utilisables.
Les espaces de noms
Les classes dans CIM Explorer sont toutes contenues dans des espaces de noms. L'espace de nom par défaut est root/cimv2, il contient les classes pour le matériel de l'ordinateur et la configuration. Pour toutes les commandes qui suivent, l'espace de nom par défaut sera utilisé.
Les commandes
Nous utiliserons les commandes CIM. Il est possible d'utiliser directement les cmdlets ou d'utiliser une requête WQL(WMI Query Language).
Listes les classes :
Get-CimClassLister une classe spécifique :
Get-CimInstance -ClassName Win32_ProcessListe une classe spécifique en utilisant un filtre :
Get-CimInstance -ClassName Win32_Process -Filter "Name = 'firefox.exe'"Liste une classe spécifique en utilisant une requête :
Get-CimInstance -Query "SELECT * FROM Win32_Process WHERE Name = 'firefox.exe'"Les outils
CIM Explorer
Il y a un outil qui permet de visualiser les classes, directement dans ISE en ajoutant un onglet : CIM Explorer. Il faut l'extraire, et lancer le setup. Lorsque l'on lance ISE, il y a un composant additionnel.



WARNING
⚠️ Il faut noter que lorsque l'on ajoute le CIMExplorer, la politique d'exécution est modifiée avec Unrestricted. Dans notre cas, ce n'est pas un problème, mais dans une entreprise, il faudra la modifier selon les normes et prescriptions de l'entreprise.
La commande est Get-CimInstance. Elle permet d'obtenir aussi des informations sur des classes Wmi ou Cim
Avec VS Code
A noté qu'il n'a pas d'équivalant à CIM Explorer avec VS Code. Pour un usage moderne avec VS Code, utiliser directement le terminal intégré avec :
Get-CimClass -Namespace root/cimv2
Get-CimClass -ClassName Win32_OperatingSystem
Get-CimInstance -ClassName Win32_OperatingSystem
Get-CimInstance -Namespace root/cimv2 -ClassName Win32_ProcessPar exemple pour les informations systèmes :
Get-CimInstance -ClassName Win32_OperatingSystem | Format-List
Résumé
- CIM (standard) et WMI (implémentation Windows) servent à collecter des infos système.
- Les cmdlets CIM s’appuient sur des protocoles adaptés aux réseaux modernes.
- Get-CimInstance permet d’interroger des classes avec filtres ou requêtes.
