Skip to content

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 :

powershell
Get-CimClass

Lister une classe spécifique :

powershell
Get-CimInstance -ClassName Win32_Process

Liste une classe spécifique en utilisant un filtre :

powershell
Get-CimInstance -ClassName Win32_Process -Filter "Name = 'firefox.exe'"

Liste une classe spécifique en utilisant une requête :

powershell
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.

image

image

image

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 :

powershell
Get-CimClass -Namespace root/cimv2
Get-CimClass -ClassName Win32_OperatingSystem
Get-CimInstance -ClassName Win32_OperatingSystem
Get-CimInstance -Namespace root/cimv2 -ClassName Win32_Process

Par exemple pour les informations systèmes :

powershell
Get-CimInstance -ClassName Win32_OperatingSystem | Format-List

image

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.

Exercices

📥 Exo CIM-WMI (PDF)