Chaque fois que nous avons besoin de découvrir des informations sur un ordinateur Windows et ses composants, nous pouvons le faire avec Get-WmiObject
.
Non seulement en lisant, en utilisant les méthodes WMI, Get-WmiObject
peut également exécuter des actions sur des systèmes locaux ou distants. Cette cmdlet est l’une des quelques-unes dans PowerShell qui peut fonctionner avec le référentiel WMI pour faciliter la gestion de nombreux systèmes.
Découverte des classes avec Get-WmiObject
À son niveau le plus basique, cette cmdlet peut interroger des informations à partir d’un ordinateur local. Tout ce dont vous aurez besoin de connaître est l’espace de noms (probablement root\cimv2
qui est par défaut) et la classe WMI où se trouvent les informations que vous recherchez.
Il existe des milliers de classes, et vous ne savez probablement pas encore quelle classe vous souhaitez utiliser. En utilisant Get-WmiObject
, nous pouvons interroger toutes les classes disponibles dans un espace de noms. En utilisant Get-WmiObject -List
, vous pourrez voir toutes les classes dans l’espace de noms root\cimv2
. Si vous devez vérifier les classes dans un autre espace de noms, vous pouvez toujours utiliser le paramètre Namespace
avec cela également.
Obtention des propriétés WMI
Une fois que vous avez la classe, il est alors temps d’investiguer et de voir quelles propriétés se trouvent dans cette classe. Peut-être que je souhaite voir quel système d’exploitation un ordinateur exécute. Je pourrais être en train de créer un rapport et j’aimerais voir ce qu’une machine distante exécute. Get-WmiObject
a un paramètre ComputerName
où vous pouvez spécifier un ou plusieurs ordinateurs distants plutôt que localement.
Mon ordinateur distant est un contrôleur de domaine appelé DC. Je vais regarder la classe Win32_OperatingSystem
pour voir quelles propriétés y sont présentes.
C’est une information utile, mais je ne vois pas le nom du système d’exploitation. Tout comme de nombreuses autres sorties PowerShell, vous ne voyez pas toutes les propriétés. Pour cela, nous devrons utiliser Select-Object
pour retourner toutes les propriétés.
I can now see a property called Caption
that lets me know the version of Windows.
Recherche des propriétés WMI
Et si vous ne cherchez pas une propriété spécifique mais plutôt une propriété qui correspond à une valeur spécifique. Par exemple, nous pouvons interroger toutes les instances de la classe CIM_DataFile
, mais cela retournerait chaque fichier sur le système ! Au lieu de cela, nous pouvons filtrer les instances par valeur en utilisant soit le paramètre Filter
soit le paramètre Query
. Examinons les deux.
En utilisant la classe CIM_DataFile
comme exemple, peut-être que je veux seulement trouver des instances qui représentent des fichiers compressés. Puisque la propriété Compressed
est une propriété sur chaque instance et qu’il s’agit d’une valeur booléenne, je peux utiliser le paramètre Filter
pour envoyer le filtre directement au fournisseur WMI ne renvoyant que les instances ayant une propriété Compressed
à True
.
Si vous connaissez WQL, vous pouvez également sélectionner la classe et spécifier le « filtre » vous-même en élaborant votre propre requête WQL.
Invocation de méthodes WMI
Get-WmiObject
peut non seulement lire des informations depuis WMI, mais il peut également faciliter l’invocation de méthodes WMI. Une méthode WMI courante qui est invoquée est la méthode Create
de la classe Win32_Process
. Il existe plusieurs façons d’inviter des méthodes WMI, telles que l’utilisation de Invoke-WmiMethod
, mais cela peut également être fait avec Get-WmiObject
. Nous devons simplement capturer une instance WMI, puis appeler la méthode sur cet objet.
Voici un exemple de démarrage à distance de notepad.exe sur un ordinateur distant. En bonus, nous utilisons également des informations d’identification alternatives pour le faire !
WMI, DCOM et PowerShell Remoting
Une dernière chose à souligner est que le successeur de cette cmdlet est : Get-CimInstance
. Bien que Get-CimInstance
offre certains avantages lors de l’utilisation de PowerShell Remoting en tant que protocole de connectivité à distance par défaut, Get-WmiObject
est parfois plus facile à utiliser.
Get-WmiObject
utilise DCOM pour communiquer avec des ordinateurs distants et est généralement également disponible. Sinon, vous devrez activer PowerShell Remoting sur les points d’extrémité distants si vous souhaitez utiliser Get-CimInstance
via WSMAN.
Pour une explication complète, consultez la documentation Microsoft.