Obtention d'objets WMI (Get-WmiObject)

La technologie WMI (Windows Management Instrumentation) est essentielle pour l'administration du système Windows, car elle expose une large gamme d'informations de façon uniforme. En raison du potentiel offert par WMI, l'applet de commande Windows PowerShell qui permet d'accéder aux objets WMI, Get-WmiObject, est l'une des plus utiles pour effectuer un véritable travail. Nous allons voir comment utiliser Get-WmiObject pour accéder à des objets WMI, puis comment utiliser des objets WMI pour réaliser des opérations spécifiques.

Listage des classes WMI

Le premier problème que la plupart des utilisateurs WMI rencontrent consiste à déterminer ce qui peut être fait avec WMI. Les classes WMI décrivent les ressources qui peuvent être gérées. Il existe des centaines de classes WMI, certaines d'entre elles contenant des dizaines de propriétés.

Get-WmiObject traite ce problème en favorisant la découverte de WMI. Vous pouvez obtenir une liste des classes WMI disponibles sur l'ordinateur local en tapant :

PS> Get-WmiObject -List


__SecurityRelatedClass                  __NTLMUser9X
__PARAMETERS                            __SystemSecurity
__NotifyStatus                          __ExtendedStatus
Win32_PrivilegesStatus                  Win32_TSNetworkAdapterSettingError
Win32_TSRemoteControlSettingError       Win32_TSEnvironmentSettingError
...

Vous pouvez récupérer les mêmes informations à partir d'un ordinateur distant en utilisant le paramètre ComputerName et en spécifiant un nom d'ordinateur ou une adresse IP :

PS> Get-WmiObject -List -ComputerName 192.168.1.29


__SystemClass                           __NAMESPACE
__Provider                              __Win32Provider
__ProviderRegistration                  __ObjectProviderRegistration
...

La liste de classes retournée par les ordinateurs distants peut varier en raison du système d'exploitation spécifique que l'ordinateur exécute et des extensions WMI particulières ajoutées par les applications installées.

Remarque :

Lors de l'utilisation de Get-WmiObject pour vous connecter à un ordinateur distant, ce dernier doit exécuter WMI et, sous la configuration par défaut, le compte que vous utilisez doit appartenir au groupe Administrateurs local de l'ordinateur distant. Il n'est pas nécessaire que Windows PowerShell soit installé sur le système distant. Cela vous permet d'administrer des systèmes d'exploitation qui n'exécutent pas Windows PowerShell, mais disposent de WMI.

Vous avez même la possibilité d'inclure ComputerName lors de la connexion au système local. Vous pouvez utiliser le nom de l'ordinateur local, son adresse IP (ou l'adresse de bouclage 127.0.0.1) ou le style WMI « . » en tant que nom d'ordinateur. Si vous exécutezWindows PowerShell sur un ordinateur nommé Admin01 avec l'adresse IP 192.168.1.90, les commandes suivantes retourneront la liste de classes WMI pour cet ordinateur :

Get-WmiObject -List
Get-WmiObject -List -ComputerName .
Get-WmiObject -List -ComputerName Admin01
Get-WmiObject -List -ComputerName 192.168.1.90
Get-WmiObject -List -ComputerName 127.0.0.1
Get-WmiObject -List -ComputerName localhost

Get-WmiObject utilise l'espace de noms root/cimv2 par défaut. Si vous souhaitez spécifier un autre espace de noms WMI, utilisez le paramètre Namespace et spécifiez le chemin d'accès de l'espace de noms correspondant :

PS> Get-WmiObject -List -ComputerName 192.168.1.29 -Namespace root


__SystemClass                           __NAMESPACE
__Provider                              __Win32Provider
...

Affichage d'informations sur une classe WMI

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

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName .


SystemDirectory : C:\WINDOWS\system32
Organization    : Global Network Solutions
BuildNumber     : 2600
RegisteredUser  : Oliver W. Jones
SerialNumber    : 12345-678-9012345-67890
Version         : 5.1.2600

Bien que nous affichions tous les paramètres, la commande peut être exprimée de manière plus succincte. Le paramètre ComputerName n'est pas nécessaire lors de la connexion au système local. Nous l'indiquons pour montrer le cas le plus général et vous rappeler le paramètre. Namespace (espace de noms) prend par défaut la valeur root/cimv2 et peut également être omis. Enfin, la plupart des applets de commande vous permettent d'omettre le nom des paramètres courants. Avec Get-WmiObject, si aucun nom n'est spécifié pour le premier paramètre, Windows PowerShell le traite comme le paramètre Class. Cela signifie que la dernière commande aurait pu être émise en tapant :

Get-WmiObject Win32_OperatingSystem

Les propriétés de la classe Win32_OperatingSystem sont plus nombreuses que celles affichées ici. Vous pouvez utiliser Get-Member pour consulter toutes les propriétés. Les propriétés d'une classe WMI sont automatiquement disponibles comme celles d'autres propriétés d'objets :

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Get-Member -MemberType Property


   TypeName: System.Management.ManagementObject#root\cimv2\Win32_OperatingSyste
m

Name                                      MemberType Definition
----                                      ---------- ----------
__CLASS                                   Property   System.String __CLASS {...
...
BootDevice                                Property   System.String BootDevic...
BuildNumber                               Property   System.String BuildNumb...
...

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

Si vous souhaitez obtenir les informations contenues dans la classe Win32_OperatingSystem qui ne sont pas visibles par défaut, vous pouvez les afficher en utilisant les applets de commande Format. Par exemple, si vous souhaitez afficher les données relatives à la mémoire disponible, tapez :

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Format-Table -Property TotalVirtualMemorySize,TotalVisibleMemorySize,FreePhysicalMemory,FreeVirtualMemory,FreeSpaceInPagingFiles

TotalVirtualMemorySize TotalVisibleMem FreePhysicalMem FreeVirtualMemo FreeSpaceInPagi
                              ory              ry         ngFiles
--------------- --------------- --------------- --------------- ---------------
        2097024          785904          305808         2056724         1558232
Remarque :

Les caractères génériques fonctionnent avec les noms de propriété dans Format-Table, par conséquent le dernier élément de pipeline peut être réduit à Format-Table -Property TotalV*,Free*.

Les données sur la mémoire peuvent être plus lisibles si vous les présentez sous forme de liste en tapant :

PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Format-List TotalVirtualMemorySize,TotalVisibleMemorySize,FreePhysicalMemory,FreeVirtualMemory,FreeSpaceInPagingFiles


TotalVirtualMemorySize : 2097024
TotalVisibleMemorySize : 785904
FreePhysicalMemory     : 301876
FreeVirtualMemory      : 2056724
FreeSpaceInPagingFiles : 1556644




Table des matières