Les administrateurs IT peuvent faire beaucoup de choses avec PowerShell et la ligne de commande ; travailler avec le réseau Windows en est une. Dans ce tutoriel, vous allez apprendre à utiliser PowerShell pour obtenir les adresses IP des adaptateurs réseau sur un ordinateur Windows avec la commande Get-NetIPAddress
et WMI.
Prérequis
Ce tutoriel suppose que vous êtes sur un ordinateur Windows 10 ou supérieur avec PowerShell v5.1 installé. Il est également supposé que vous êtes dans un environnement Active Directory. Sinon, assurez-vous de vous renseigner sur la propriété Credential
sur la commande New-CimSession
.
Utilisation de Get-NetIPAddress
PowerShell dispose de différents cmdlets pour travailler avec les connexions réseau tels que Get-NetAdapter
, Get-NetAdapterBinding
, et même un spécifique pour trouver des adresses IP appelé Get-NetIPAddress
. Si vous souhaitez utiliser PowerShell pour obtenir l’adresse IP dans un script simple, n’hésitez pas à utiliser ces cmdlets.
Restez simple. Si PowerShell offre un moyen plus simple de faire quelque chose, utilisez-le !
Par exemple, pour trouver l’adresse IPv4 sur tous les adaptateurs réseau sur un ordinateur local, exécutez une seule ligne.

La sortie ci-dessus fait référence à un adaptateur réseau spécifique tel que l’adaptateur Ethernet et ne renvoie que l’adresse IP.

Vous avez terminé ! Utiliser simplement PowerShell pour obtenir une adresse IP est un processus simple, du moins beaucoup plus que d’utiliser d’autres moyens.
Si vous n’êtes pas fan de PowerShell, vous pouvez également utiliser la commande ipconfig pour obtenir une adresse IP. En savoir plus sur ipconfig sur Les commandes Ipconfig que vous devez connaître.
Pourquoi utiliser CIM/WMI ?
Lorsque vous exécutez la cmdlet Get-NetIPAddress
, PowerShell interroge en réalité WMI pour récupérer ces informations. Pourquoi est-il important de le savoir ? Parce que vous pouvez interroger directement WMI vous-même. Mais pourquoi utiliser WMI lorsque vous pouvez utiliser une seule commande ?
Une des raisons les plus courantes d’utiliser WMI plutôt qu’une seule commande comme Get-NetIPAddress
est lorsque vous interrogez déjà WMI. WMI contient beaucoup d’informations système utiles lors de la création de scripts à des fins d’inventaire.
Lorsque vous communiquez avec WMI avec PowerShell, vous pouvez créer une session CIM similaire à une session PSRemoting. L’utilisation d’une session est une façon efficace de vous authentifier une fois sur un ordinateur et de réutiliser cette connexion de manière répétée.
Utilisez CIM pour obtenir une adresse IP lorsque vous intégrez cette tâche à un script plus important.
Interroger CIM sans une session
Lorsque vous construisez un script PowerShell en utilisant CIM pour interroger différentes informations, vous devriez utiliser une session CIM réutilisable. La réutilisation d’une seule session accélère non seulement votre script, mais réduit également la duplication du code.
Par exemple, peut-être souhaitez-vous savoir quel système d’exploitation exécute un ordinateur distant sous Windows. CIM contient le nom du système d’exploitation dans une propriété appelée Caption à l’intérieur de la classe Win32_OperatingSystem. Pour obtenir ces informations, vous utiliserez la commande Get-CimInstance
ci-dessous, en spécifiant le nom de l’ordinateur (REMOTECOMPUTER
), la classe CIM (Win32_OperatingSystem
), et en référençant uniquement la propriété Caption
sur l’objet.
Lorsque vous exécutez Get-CimInstance
, PowerShell doit trouver l’ordinateur distant, transmettre les informations d’identification connectées et enfin interroger CIM pour les informations dont vous avez besoin. Il y a beaucoup de surcharge associée à l’exécution de Get-CimInstance
sans une session.
Et si vous construisez un script d’inventaire de serveur et que vous souhaitez également obtenir des informations sur le stockage, la mémoire, le réseau, etc. ? Dans ce cas, vous auriez beaucoup de commandes Get-CimInstance
comme ci-dessous.
Votre script se connectera à REMOTECOMPUTER
quatre fois dans le extrait de code ci-dessus, et que se passe-t-il si le nom de l’ordinateur change ? Vous devrez trouver/remplacer ce nom d’ordinateur, ce qui n’est jamais un bon signe lors de la programmation.
Création d’une session CIM
Au lieu d’utiliser Get-CimInstance
avec une session, vous devriez créer une seule session CIM avec la commande New-CimSession
et réutiliser cette session de manière répétée.
Au lieu de vous authentifier à distance sur un ordinateur à plusieurs reprises, créez une seule session CIM avec New-CimSession
et transmettez cette session à Get-CimInstance
comme ci-dessous.
Une fois que vous avez terminé avec la session, déconnectez-vous et supprimez-la de la mémoire.
L’utilisation de sessions CIM comme ci-dessus est un excellent moyen de travailler avec CIM/WMI.
Recherche du bon adaptateur réseau
Étant donné qu’un ordinateur Windows peut avoir différents adaptateurs réseau, vous devez d’abord déterminer quel adaptateur réseau vous souhaitez obtenir l’adresse IP. Lorsque vous utilisez WMI, utilisez la classe Win32_NetworkAdapterConfiguration. Cette classe fournit une grande partie des informations que Get-NetIPAddress
retourne.
Tout d’abord, créez un script PowerShell avec le nom de l’ordinateur distant, créez une nouvelle session CIM, puis ajoutez votre ligne de suppression de session CIM ci-dessous.
Une fois que vous avez construit le code de la session CIM, insérez la requête WMI.

Vous pouvez voir que la sortie par défaut ci-dessus ne montre pas l’adresse IP. Vous devrez creuser un peu plus profondément. Il ne renvoie également pas une seule instance. Comment limiter celui qui a l’adresse IP que vous recherchez?
Pour ce faire, affichez d’abord toutes les propriétés en utilisant Select-Object
.
Parcourez la sortie, et vous remarquerez certains adaptateurs réseau sans adresse IP, certains avec une, et certains avec plusieurs adresses IP! Vous devez limiter cela. Vous devez trouver un critère standard pour filtrer afin qu’il puisse s’appliquer à tous les serveurs.

Sur chaque adaptateur, vous devriez voir la propriété IPEnabled
. Lorsque cette propriété est définie sur Vrai, le protocole TCP/IP est lié à cette carte NIC, ce qui est une condition préalable pour avoir une adresse IP. Vous devez restreindre les NIC qui ont la propriété IPEnabled
définie sur Vrai, et vous aurez l’adaptateur que vous recherchez.
Lorsque vous filtrez les instances WMI, il est préférable d’utiliser le paramètre Filter
sur Get-CimInstance
. Il y a un dicton dans la communauté PowerShell qui dit « filter left ». Si vous en avez la chance, cela signifie toujours filtrer la sortie aussi loin à gauche que possible.
Ne pas utiliser Where-Object
à moins que vous en ayez besoin. Les performances seront bien meilleures en raison du manque de surcharge de traitement d’objets inutiles à travers le pipeline.
Le paramètre Filter
sur Get-CimInstance
utilise le langage de requête Windows (WQL). WQL est un petit sous-ensemble de SQL. Le paramètre Filter
attend la même syntaxe de clause de contrainte WHERE que SQL le ferait.
Pour trouver toutes les instances CIM de la classe Win32_NetworkAdapterConfiguration avec la propriété IPEnabled définie sur Vrai, utilisez la requête WQL SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 'True'
.
Depuis que nous spécifions déjà le nom de classe pour l’argument du paramètre ClassName
dans Get-CimInstance
, nous devons spécifier IPEnabled = 'True'
pour le Filter
. Cela renverra uniquement l’adaptateur réseau avec l’adresse IP.
En exécutant le code ci-dessus, vous devriez voir que Get-CimInstance
ne renvoie qu’une seule instance (ou un ensemble limité).
Maintenant que vous avez une seule instance CIM et que vous connaissez la propriété que vous recherchez (IPAddress
), voyons à quoi cela ressemble. Vous verrez ci-dessous que, dans cette instance, il renvoie une seule instance CIM mais avec trois chaînes pour la propriété IPAddress
, y compris des adresses IPV6.
Vous allez devoir filtrer encore plus d’éléments. Parce que WQL ne peut pas filtrer plus profondément que la valeur de propriété IPAddress
, vous devez maintenant extraire l’adresse IPv4.
L’adresse IPV4 est généralement la première définie dans le tableau. Choisissez celle-ci en faisant référence à l’indice 0 comme indiqué ci-dessous. Lorsque vous le faites, vous verrez qu’il ne renvoie qu’une seule chaîne d’adresse IP IPV4.
L’adresse IPV4 n’est peut-être pas toujours le premier élément du tableau. En fait, la propriété IPAddress peut ne pas être un tableau du tout. Les configurations IP varient considérablement selon les adaptateurs et les configurations diverses. Vous devrez peut-être faire preuve de créativité pour les filtrer.
Conclusion
Si vous avez besoin d’utiliser PowerShell pour obtenir une adresse IP d’un ordinateur, commencez par examiner d’abord la commande Get-NetIPAddress
. Si vous êtes en train de créer un script plus complexe ou si vous ne pouvez pas exécuter cette commande pour une raison quelconque, envisagez d’utiliser Get-CimInstance
et une session CIM pour effectuer le travail nécessaire.
Source:
https://adamtheautomator.com/powershell-get-ip-address/