27 nov. 2011

[snippet] Récupérer les adresses IP courrantes en powershell

Il est souvent intéressant de récupérer la ou les adresses IP d'un serveur qui exécute un script powershell, quand par exemple, celui-ci envoi un message électronique ou écrit des logs. Il existe plusieurs façons, mais voici un petit morceau de code en PowerShell qui permet de récupérer facilement toutes les adresses IP actives du serveur.

(Get-WmiObject win32_networkadapterconfiguration | ForEach-Object { echo $_.IPAddress }) -join "; "

Chez moi retournera 5.42.143.38; 192.168.100.196; 192.168.1.196; 172.16.10.196.

Explication :
 Get-WmiObject est une cmdlet très utile qui permet de récupérer des valeurs sur un peu près tout ce qui tourne dans le système (périphériques, paramétrages, pilotes, comptes ...) en l’occurrence la classe Win32_NetworkAdapterConfiguration permet de récupérer les valeurs des cartes réseaux.
 ForEach-Object permet d'afficher chaque adresse IP de chaque carte réseau.
 Les parenthèses permettront de retourner tout le résultat du pipeline à l'opérateur join, et non pas seulement insérer l'opérateur dans le dernier pipe, à savoir ForEach-Object ou echo.
 -join "; " permet de faire l'équivalent d'un implode en PHP, c'est à dire rassembler en une chaîne tous les éléments d'un tableau, en séparant ces éléments par la chaîne spécifiée à l'opérateur join.