02/07/2024

10 commandes pour configurer le réseau sous Windows avec PowerShell

I. Présentation

Pour administrer le réseau d'une machine Windows, nous pouvons utiliser différents cmdlets PowerShell, notamment ceux présents dans le module "NetTCPIP" qui est intégré nativement à Windows. Ainsi, en tant qu'administrateur système, il va vous permettre d'effectuer la configuration réseau de Windows en ligne de commande, que ce soit via la console ou à partir d'un script.

Dans ce chapitre, nous allons étudier un ensemble de 10 commandes pratiques pour vous permettre de gérer le réseau avec PowerShell, sans utiliser des commandes historiques telles que "ipconfig", "netsh" ou encore "ping". De plus, si vous envisagez de configurer un serveur Windows Server en mode Core, c'est-à-dire sans interface graphique, ces commandes vous seront utiles.

II. Obtenir la liste des interfaces réseau

Avant de pouvoir configurer une interface réseau sur une machine, vous devez l'identifier. Pour cela, nous pouvons compter sur le cmdlet "Get-Net-Adapter". Il permet d'obtenir la liste des interfaces réseau détectées par Windows et visible aussi via la console "Centre Réseau et partage".

Get-NetAdapter

Cette commande est capable de lister les adaptateurs Ethernet (RJ45 et Wi-Fi), mais aussi les adaptateurs Bluetooth. La liste retournée contient un ensemble de propriétés correspondantes à des caractéristiques de chaque interface réseau (nom, statut, adresse MAC, vitesse de connexion, etc.).

PowerShell - Get-NetAdapter - Exemple

Pour obtenir la liste de toutes les interfaces réseau actives, nous pouvons filtrer la liste de cette façon :

Get-NetAdapter | Where-Object { $_.Status -eq "Up" }

III. Renommer une interface réseau

Par défaut, l'interface réseau sous Windows est nommée "Ethernet0". Ce nom n'est pas très explicite et sur une machine avec plusieurs interfaces réseau, il sera judicieux de nommer chaque interface. Pour cela, nous pouvons utiliser le cmdlet PowerShell "Rename-NetAdapter.

Nous pouvons renommer l'interface "Ethernet0" en "LAN" de cette façon :

Rename-NetAdapter -Name Ethernet0 -NewName LAN

Ceci implique d'ouvrir la console PowerShell en tant qu'administrateur sous peine de faire face à un "Accès refusé".

IV. Activer, désactiver ou redémarrer une interface réseau

À partir du "Centre réseau et partage" de Windows, nous pouvons activer ou désactiver une interface réseau. Cette action est parfois utile en cas de dysfonctionnement sur une interface réseau, ou tout simplement pour changer l'état d'une interface réseau sans intervenir physiquement sur le support de connexion (câble Ethernet RJ45, par exemple).

Avec PowerShell, nous allons pouvoir activer ou désactiver une interface réseau, mais aussi redémarrer une interface réseau. Windows contient les trois cmdlets suivants prévus à cet effet :

  • Enable-NetAdapter : pour activer une interface réseau
  • Disable-NetAdapter : pour désactiver une interface réseau
  • Restart-NetAdapter : pour redémarrer une interface réseau

En fonction de l'action à réaliser, vous devez simplement choisir la bonne commande et préciser le nom de l'interface.

Pour désactiver l'interface réseau nommée "LAN", nous pouvons utiliser le cmdlet "Disable-NetAdapter" avec le paramètre "-Name" qui permettra de préciser le nom de l'interface réseau.

Disable-NetAdapter -Name LAN

Puis, nous pouvons utiliser le premier cmdlet évoqué dans ce chapitre pour lire la valeur de la propriété "Status" sur notre interface réseau nommée "LAN". En principe, la valeur "Disabled" doit être retournée.

(Get-NetAdapter -Name LAN).Status

À tout moment, nous pouvons activer l'interface nommée "LAN" avec cette commande :

Enable-NetAdapter -Name LAN

Enfin, pour redémarrer une interface réseau, nous allons utiliser le cmdlet "Restart-NetAdapter" sur le même principe.

Restart-NetAdapter -Name LAN

V. Obtenir la configuration IP d'une interface

Le cmdlet "Get-NetIPConfiguration", dont l'alias est "gip", est une alternative à la célèbre commande MS-DOS "ipconfig". Par défaut, cette commande permettra d'obtenir la configuration réseau TCP/IP de toutes les interfaces réseau de la machine, sauf celles non connectées. L'interface de boucle locale (loopback) est également exclue.

Get-NetIPConfiguration
PowerShell - Get-NetIPConfiguration - Exemple

Pour avoir des informations sur toutes les interfaces, peu importe le type et l'état, le paramètre "-All" doit être ajouté.

Get-NetIPConfiguration -All

Au quotidien, pensez à utiliser plutôt l'alias "gip" dans la console, car il est beaucoup plus rapide à saisir que le nom complet du cmdlet.

Si vous trouvez que ce cmdlet ne retourne pas assez d'informations, sachez que vous pouvez ajouter le paramètre "-Detailed".

Get-NetIPConfiguration -Detailed
gip -Detailed

Il permet d'afficher des propriétés supplémentaires relativement intéressantes, dont celles-ci :

  • NetProfile.NetworkCategory : type de réseau, ce qui permet de savoir si l'on est sur un réseau public, privé ou de domaine.
  • NetProfile.IPv4Connectivity : état de la connectivité IPv4, permet de savoir si la machine a accès à Internet via cette interface.
  • NetIPv4Interface.DHCP : état du DHCP sur l'IPv4.
  • NetIPv6Interface.DHCP : état du DHCP sur l'IPV6.
  • DNSServer : l'adresse IP du serveur DNS.

En complément de ce cmdlet, nous pouvons utiliser "Get-NetIPAddress" qui présente l'avantage de lister toutes les adresses IP configurées sur la machine locale, en IPv4 et IPv6, ainsi que pour la boucle locale.

Get-NetIPAddress

Nous pouvons même générer un tableau récapitulatif de cette façon :

Get-NetIPAddress | Sort-Object -Property InterfaceAlias | Format-Table InterfaceAlias, IPAddress, AddressFamily

Voici un exemple :

PowerShell - Get-NetIPAdress - Exemple

VI. Définir une adresse IPv4

Nous allons configurer une adresse IP statique sur la carte réseau "LAN" présente sur la machine locale et fraichement renommée. À l'aide du cmdlet "New-NetIPAddress", nous allons pouvoir définir une adresse IPv4 sur cette carte réseau.

Ceci implique d'utiliser ce cmdlet avec un ensemble de paramètres :

  • Le paramètre "-InterfaceAlias" ou "-InterfaceIndex" pour préciser le nom de l'interface ou le numéro d'index de l'interface à configurer. Il est impératif de cibler l'interface par son nom ou le numéro d'index. Nous pouvons récupérer cette information avec le cmdlet "Get-NetAdapter".
  • Le paramètre "-IPAddress" pour indiquer l'adresse IPv4 à associer sur la carte réseau.
  • Le paramètre "-PrefixLength" pour préciser la longueur du masque de sous-réseau (au format CIDR).
  • Le paramètre "-DefaultGateway" pour préciser la passerelle par défaut (routeur)

Prenons un exemple : nous souhaitons définir l'adresse IP "192.168.14.50/24" sur la carte réseau "LAN". La passerelle par défaut sera "192.168.14.2". Voici la commande complète à exécuter :

New-NetIPAddress -InterfaceAlias LAN -IPAddress 192.168.14.50 -PrefixLength 24 -DefaultGateway 192.168.14.2 -AddressFamily IPv4

L'adresse IP sera immédiatement définie sur la carte réseau, et associée à deux magasins, "ActiveStore" et "PersistentStore". L'adresse IP sera donc persistante même après un redémarrage de la machine.

Par la suite, si vous souhaitez changer l'adresse IP sur cette interface, vous devez la supprimer, puis ajouter une nouvelle adresse IP. Ainsi, pour utiliser l'adresse IP "192.168.14.51" au lieu de "192.168.14.50", nous devons utiliser ces cmdlets :

Remove-NetIPAddress -InterfaceAlias LAN -IPAddress 192.168.14.50
New-NetIPAddress -InterfaceAlias LAN -IPAddress 192.168.14.51

VII. Définir un serveur DNS sur l'interface réseau

Nous venons de configurer l'adresse IP et la passerelle par défaut sur notre interface nommée "LAN", mais il manque un élément important : le ou les serveurs DNS à solliciter pour la résolution de noms. Nous devons utiliser deux cmdlets supplémentaires :

  • Get-DnsClientServerAddress : pour obtenir la liste des serveurs DNS configurés sur chaque interface réseau de la machine.
  • Set-DnsClientServerAddress : pour définir une liste de serveurs DNS sur une interface réseau.

Pour utiliser le premier cmdlet, il vous suffit de l'appeler sans préciser de paramètres (bien qu'il y ait des paramètres, notamment pour filtrer IPv4 ou IPv6, ou spécifier une interface avec son nom ou son numéro d'index).

Get-DnsClientServerAddress

La commande ci-dessous permet de définir les serveurs DNS ayant les adresses IP "192.168.14.10" et "192.168.14.11" sur l'interface nommée "LAN".

Set-DnsClientServerAddress -InterfaceAlias LAN -ServerAddresses ("192.168.14.10","192.168.14.11")

Ensuite, nous pouvons vérifier la bonne prise en charge de cette configuration :

Windows - Configurer DNS avec PowerShell

VIII. Définir un suffixe DNS

En complément des adresses IP des serveurs DNS, il est fréquent de définir un suffixe DNS sur l'interface réseau connectée à un réseau d'entreprise, notamment en environnement Active Directory. Pour effectuer cette configuration, nous pouvons utiliser le cmdlet "Set-DnsClient".

L'exemple ci-dessous permet de définir le suffixe DNS "it-connect.local" sur l'interface nommée "LAN" :

Set-DnsClient -InterfaceAlias LAN -ConnectionSpecificSuffix it-connect.local

IX. Tester la résolution de noms

Le cmdlet PowerShell "Resolve-DnsName" est une alternative à la commande "nslookup" qui va nous permettre d'effectuer de la résolution de noms. Ce sera l'occasion de vérifier si la configuration que nous devons d'effectuer est opérationnelle.

Voici quelques exemples d'utilisations.

  • Résoudre le nom d'hôte "it-connect.fr"
Resolve-DnsName it-connect.fr
  • Résoudre le nom d'hôte "it-connect.fr" en sollicitant le serveur DNS "8.8.8.8"
Resolve-DnsName it-connect.fr -Server 8.8.8.8
  • Obtenir des informations sur le MX (messagerie) du domaine "it-connect.tech"
Resolve-DnsName it-connect.tech -Type MX
  • Résoudre le nom d'hôte "it-connect.tech" en s'appuyant uniquement sur les données présentes dans le cache DNS local
Resolve-DnsName it-connect.tech -CacheOnly
  • Résoudre plusieurs noms d'hôtes avec une seule commande, en se concentrant sur les enregistrements IPv4 (type A)
"google.com", "google.fr" | Resolve-DnsName -Type A

Le cmdlet "Resolve-DnsName" est très pratique et il pourrait vous faire oublier la commande "nslookup", que vous aviez peut-être l'habitude d'utiliser jusqu'ici. De plus, le fait que ce soit un cmdlet PowerShell nous permet de l'exploiter plus facilement dans un script, car nous avons accès à un ensemble de propriétés.

X. Effectuer un test de connectivité

En général, quand nous avons besoin d'effectuer un test de connectivité réseau vers une machine ou un équipement, nous utilisons la commande "ping. Sachez que PowerShell intègre le cmdlet "Test-Connection" prévu à cet effet puisqu'il va envoyer des paquets ICMP à destination de l'hôte distant afin de tester la communication entre deux équipements.

Par exemple, nous pouvons effectuer un ping vers l'adresse IP "1.1.1.1" à l'aide de cette commande :

Test-Connection 1.1.1.1

Voici le résultat obtenu :

La propriété "Source" indique le nom de la machine locale, tandis que la propriété "Time (ms)" indique le temps de réponse. Si vous visualisez une valeur égale à "0", c'est synonyme d'un excellent temps de réponse sur votre réseau. À titre de comparaison, l'outil ping habituel indiquerait la valeur "temps<1ms".

Avec ce cmdlet, nous pouvons également effectuer un ping vers plusieurs machines. Le cmdlet va effectuer un ping vers chaque machine tour à tour. Il suffit de séparer les noms d'hôtes par une virgule.

Test-Connection 1.1.1.1,8.8.8.8,google.fr

De plus, le paramètre "-Count" permet de préciser le nombre de ping à effectuer. Ainsi, nous pouvons lui associer la valeur "1" pour effectuer un test de ping très rapide vers un ensemble de machines.

Test-Connection 1.1.1.1,8.8.8.8,google.fr -Count 1

Voici le résultat obtenu :

PowerShell - Test-Connection avec paramètre Count

Enfin, nous pourrions même aller plus loin et effectuer un test de connectivité sur un ensemble de machines à partir d'une liste obtenue depuis un fichier CSV ou depuis l'annuaire Active Directory de l'organisation.

L'exemple ci-dessous consiste à obtenir le nom de tous les ordinateurs joints à l'Active Directory grâce au cmdlet "Get-ADComputer" présent dans le module "ActiveDirectory" de PowerShell. Cette liste est stockée dans la variable "$ComputerList" puis elle est parcourue par le cmdlet "Test-Connection" afin d'effectuer un test de ping vers chaque machine.

$ComputersList = (Get-ADComputer -Filter *).Name
Test-Connection $ComputersList -Count 1

Pour approfondir ce dernier exemple, consultez cet article :

XI. Tester un port

Grâce au cmdlet "Test-NetConnection" de PowerShell, nous allons pouvoir effectuer un test sur un port spécifique (uniquement en TCP). Ceci permettra de déterminer si un port est ouvert ou non, comme nous pouvons le faire avec le client "Telnet" (en détournant sa fonction de base).

Pour utiliser le cmdlet "Test-NetConnection", nous devons préciser deux paramètres :

  • -ComputerName : le nom ou l'adresse IP de la cible.
  • -Port : le numéro de port à tester

Si nous souhaitons tester l'hôte "google.fr", sur le port "443", associé au protocole HTTPS et généralement utilisé par les serveurs Web, nous devons exécuter cette commande :

Test-NetConnection -ComputerName google.fr -Port 443

Nous obtenons une réponse positive, signe que le port "443" est ouvert sur cet hôte. Ce n'est pas une surprise car nous ciblons directement "google.fr". Nous pouvons le vérifier grâce à la propriété "TcpTestSucceeded" dont la valeur est "True", ce qui indique que le test a réussi.

Tester port HTTPS avec PowerShell

Enfin, sachez que ce cmdlet supporte aussi le nom de certains services, ce qui évite de préciser le numéro de port. Pour effectuer un test sur le port "80", nous pouvons préciser le paramètre "-CommonTCPPort" avec la valeur "HTTP" :

Test-NetConnection -ComputerName 1.1.1.1 -CommonTCPPort HTTP

Terminons par un bonus : si vous souhaitez afficher la liste de tous les ports sur lesquels écoute un serveur (ou un poste de travail), vous pouvez utiliser le cmdlet "Get-NetTCPConnection" de cette façon :

Get-NetTCPConnection -State Listen

XII. Conclusion

Suite à la lecture de ce chapitre, vous avez connaissance d'une bonne dizaine de commandes PowerShell que nous avons pu explorer au travers 10 cas pratiques spécifiques. Ceci vous permettra d'être plus à l'aise dans la gestion des interfaces réseau et de la connectivité réseau sur une machine Windows.


livre pour apprendre PowerShell
author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.