Obtention d’objets WMI avec Get-CimInstance

Cet exemple s’applique uniquement aux plateformes Windows.

WMI (Windows Management Instrumentation) est une technologie majeure pour l’administration du système Windows, car elle expose un vaste éventail d’informations de manière uniforme. Compte tenu de tout ce que WMI permet de réaliser, la cmdlet Windows PowerShell pour l’accès aux objets WMI, Get-CimInstance, est l’une des plus utiles pour travailler réellement. Nous allons aborder l’utilisation des cmdlets CIM pour accéder aux objets WMI, puis expliquer comment utiliser des objets WMI pour réaliser des opérations spécifiques.

Affichage de la liste des classes WMI

Le premier problème que rencontrent la plupart des utilisateurs de WMI est de comprendre ce que WMI permet de faire. Les classes WMI décrivent les ressources qui peuvent être gérées. Il existe des centaines de classes WMI, dont certaines contiennent des dizaines de propriétés.

Get-CimClass résout ce problème en rendant WMI détectable. Vous pouvez obtenir la liste des classes WMI disponibles sur l’ordinateur local en tapant ce qui suit :

Get-CimClass -Namespace root/CIMV2 | 
    Where-Object CimClassName -like Win32* | 
    Select-Object CimClassName
CimClassName
------------
Win32_DeviceChangeEvent
Win32_SystemConfigurationChangeEvent
Win32_VolumeChangeEvent
Win32_SystemTrace
Win32_ProcessTrace
Win32_ProcessStartTrace
Win32_ProcessStopTrace
Win32_ThreadTrace
Win32_ThreadStartTrace
Win32_ThreadStopTrace
...

Vous pouvez récupérer les mêmes informations à partir d’un ordinateur distant à l’aide du paramètre ComputerName, en spécifiant une adresse IP ou un nom d’ordinateur :

Get-CimClass -Namespace root/CIMV2 -ComputerName 192.168.1.29

La liste de classes retournée par des ordinateurs distants peut varier selon le système d’exploitation que l’ordinateur exécute et les extensions WMI particulières ajoutées par les applications installées.

Remarque

Lorsque vous utilisez des cmdlets CIM pour vous connecter à un ordinateur distant, celui-ci doit exécuter WMI et le compte que vous utilisez doit figurer dans le groupe Administrateurs local sur l’ordinateur distant. PowerShell ne doit pas nécessairement être installé sur le système distant. Cela permet d’administrer des systèmes d’exploitation qui n’exécutent pas PowerShell, mais disposent de WMI.

Affichage des détails de classe WMI

Si vous connaissez déjà le nom d’une classe WMI, vous pouvez l’utiliser pour obtenir des informations immédiatement. Par exemple, une des classes WMI couramment utilisées pour récupérer des informations sur un ordinateur est Win32_OperatingSystem.

Get-CimInstance -Class Win32_OperatingSystem
SystemDirectory     Organization BuildNumber RegisteredUser SerialNumber            Version
---------------     ------------ ----------- -------------- ------------            -------
C:\WINDOWS\system32 Microsoft    22621       USER1          00330-80000-00000-AA175 10.0.22621

Bien que nous montrions tous les paramètres, la commande peut être exprimée de façon plus concise. Le paramètre ComputerName n’est pas nécessaire lors de la connexion au système local. Nous le montrons pour illustrer le cas le plus général, et vous rappeler la disponibilité de ce paramètre. Par défaut, l’espace de noms passe à root/CIMV2. Vous pouvez également l’omettre. Enfin, la plupart des applets de commande permettent l’omission du nom de paramètres communs. Avec Get-CimInstance, si aucun nom n’est spécifié pour le premier paramètre, PowerShell traite celui-ci en tant que paramètre Classe. Cela signifie que la dernière commande pourrait avoir été émise en tapant ce qui suit :

Get-CimInstance Win32_OperatingSystem

La classe Win32_OperatingSystem a beaucoup plus de propriétés que celles affichées ici. Vous pouvez utiliser l’applet de commande Get-Member pour voir toutes les propriétés. Les propriétés d’une classe WMI sont automatiquement disponibles, comme d’autres propriétés de l’objet :

Get-CimInstance -Class Win32_OperatingSystem | Get-Member -MemberType Property
   TypeName: Microsoft.Management.Infrastructure.CimInstance#root/cimv2/Win32_OperatingSystem
Name                                      MemberType Definition
----                                      ---------- ----------
BootDevice                                Property   string BootDevice {get;}
BuildNumber                               Property   string BuildNumber {get;}
BuildType                                 Property   string BuildType {get;}
Caption                                   Property   string Caption {get;}
CodeSet                                   Property   string CodeSet {get;}
CountryCode                               Property   string CountryCode {get;}
CreationClassName                         Property   string CreationClassName {get;}
CSCreationClassName                       Property   string CSCreationClassName {get;}
CSDVersion                                Property   string CSDVersion {get;}
CSName                                    Property   string CSName {get;}
CurrentTimeZone                           Property   int16 CurrentTimeZone {get;}
DataExecutionPrevention_32BitApplications Property   bool DataExecutionPrevention_32BitApplications {get;}
DataExecutionPrevention_Available         Property   bool DataExecutionPrevention_Available {get;}
...

Affichage de propriétés autres que par défaut avec les applets de commande Format

Si vous souhaitez des informations contenues dans la classe Win32_OperatingSystem qui ne sont pas affichées par défaut, vous pouvez les afficher à l’aide des cmdlets Format. Par exemple, si vous souhaitez afficher les données de la mémoire disponible, tapez :

Get-CimInstance -Class Win32_OperatingSystem | Format-Table -Property TotalVirtualMemorySize, TotalVisibleMemorySize, FreePhysicalMemory, FreeVirtualMemory, FreeSpaceInPagingFiles
TotalVirtualMemorySize TotalVisibleMemorySize FreePhysicalMemory FreeVirtualMemory FreeSpaceInPagingFiles
---------------------- ---------------------- ------------------ ----------------- ----------------------
              41787920               16622096            9537952          33071884               25056628

Notes

Les caractères génériques fonctionnant avec les noms de propriété dans Format-Table, l’élément final du pipeline peut être réduit à Format-Table -Property Total*Memory*, Free*

Les données de la mémoire peuvent être plus lisibles si vous les affichez sous forme de liste en tapant ce qui suit :

Get-CimInstance -Class Win32_OperatingSystem | Format-List Total*Memory*, Free*
TotalVirtualMemorySize : 41787920
TotalVisibleMemorySize : 16622096
FreePhysicalMemory     : 9365296
FreeSpaceInPagingFiles : 25042952
FreeVirtualMemory      : 33013484
Name                   : Microsoft Windows 11 Pro|C:\Windows|\Device\Harddisk0\Partition2