Introduction
Quand un service cesse de répondre ou qu'un déploiement échoue, les problèmes réseau sont souvent les premiers soupçonnés. PowerShell offre un moyen puissant et scriptable d'investiguer sans installer d'outils supplémentaires. Cet article montre comment utiliser PowerShell pour le dépannage réseau avec des exemples pratiques : vérification de la résolution DNS, test des ports et de la connectivité, traçage des routes et diagnostic des pannes courantes.
Nous nous concentrons sur des scénarios réels pour les développeurs, les consultants DevOps et les équipes de startup. Chaque section comprend des commandes, les résultats attendus, les signaux d'échec et les étapes de récupération. L'objectif est la sécurité opérationnelle : observer avant de modifier, limiter le rayon d'impact et vérifier les résultats.
Inventaire de la version et de l'environnement
Avant de dépanner, sachez avec quoi vous travaillez. Vérifiez votre version de PowerShell et les informations système de base.
Vérifier la version de PowerShell
$PSVersionTable.PSVersion
Résultat attendu (exemple) :
Major Minor Build Revision
----- ----- ----- --------
7 4 6 0
Si vous voyez la version 5.1 ou inférieure, certaines applets de commande comme Test-NetConnection peuvent se comporter différemment. Envisagez de mettre à jour vers PowerShell 7 pour un meilleur support multiplateforme.
Recueillir les informations sur les cartes réseau
Get-NetAdapter | Format-Table Name, Status, LinkSpeed, MacAddress
Vérifiez que l'état de la carte est « Up » et que la vitesse de liaison correspond à votre réseau attendu (par exemple, 1 Gbit/s). Si l'état est « Disabled » ou « Disconnected », c'est votre point de départ.
Vérifier la configuration IP
Get-NetIPConfiguration | Format-List InterfaceAlias, IPv4Address, IPv4DefaultGateway, DNSServer
Vérifiez que l'adresse IP est dans le sous-réseau attendu et que la passerelle par défaut est joignable. Une passerelle par défaut manquante explique souvent les problèmes de « pas d'internet ».
Piège : Exécuter ces commandes sans droits d'administrateur peut masquer certaines informations. Ouvrez PowerShell en tant qu'administrateur lors du dépannage des cartes ou des règles de pare-feu.
Chemin de configuration sûr
Enregistrez toujours l'état actuel avant d'apporter des modifications. Utilisez d'abord des commandes en lecture seule, et effectuez un petit changement à la fois.
Configuration du client DNS
Pour voir les paramètres DNS actuels :
Get-DnsClientServerAddress -InterfaceAlias "Ethernet" | Format-Table
Si vous devez définir un serveur DNS spécifique (par exemple, pour tester), notez la valeur actuelle, puis modifiez-la :
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ServerAddresses ("8.8.8.8", "1.1.1.1")
Vérification : Exécutez Resolve-DnsName example.com et confirmez qu'il résout.
Récupération : Pour revenir en arrière, exécutez la même commande avec les adresses de serveur DNS d'origine.
Vérification des règles de pare-feu
Avant de modifier les règles de pare-feu, listez les règles existantes pour un port ou un programme spécifique :
Get-NetFirewallRule -DisplayName "*HTTP*" | Format-Table DisplayName, Enabled, Direction, Action
Si une règle est manquante ou bloque, créez une nouvelle règle avec précaution :
New-NetFirewallRule -DisplayName "Allow Port 8080" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow
Testez toujours après avoir ajouté la règle et supprimez-la si elle n'est pas nécessaire.
Piège : Désactiver largement le pare-feu pour « voir si ça marche » est dangereux. Créez plutôt une règle étroite et vérifiez.
Vérification et diagnostics
Cette section couvre les tâches de dépannage réseau les plus courantes : DNS, ports, connectivité et traçage de route.
Résolution DNS avec Resolve-DnsName
Utilisez Resolve-DnsName pour vérifier si un nom d'hôte se résout et vers quelle adresse IP.
Resolve-DnsName www.google.com
Extrait du résultat attendu :
Name Type TTL Section IPAddress
---- ---- --- ------- ---------
www.google.com A 300 Answer 142.250.72.4
Si vous n'obtenez pas de réponse ou une erreur, le serveur DNS est peut-être injoignable ou le domaine n'existe pas. Essayez d'interroger un serveur DNS spécifique :
Resolve-DnsName www.google.com -Server 8.8.8.8
Si cela fonctionne, votre serveur DNS configuré est en cause. Modifiez-le ou videz le cache DNS :
Clear-DnsClientCache
Piège : La mise en cache négative peut provoquer des échecs temporaires. Clear-DnsClientCache aide souvent.
Tester les ports avec Test-NetConnection
Test-NetConnection est une applet de commande polyvalente pour le ping, le test de port et le traçage de route.
Pinger un hôte :
Test-NetConnection www.google.com
Le résultat inclut PingSucceeded et RemoteAddress. Si le ping échoue mais que vous soupçonnez que l'ICMP est bloqué, testez un port TCP spécifique :
Test-NetConnection www.google.com -Port 443
Si TcpTestSucceeded est True, le port est ouvert. Si False, le port est fermé ou filtré.
Piège : Test-NetConnection peut être lent car il effectue une résolution DNS inverse. Pour des vérifications de port plus rapides, utilisez la méthode .NET TcpClient :
$client = New-Object System.Net.Sockets.TcpClient
$client.Connect("www.google.com", 443)
$client.Connected
$client.Close()
Vérifier la connectivité avec Test-Connection
Pour des tests de ping plus rapides, utilisez Test-Connection :
Test-Connection -ComputerName 8.8.8.8 -Count 2
Cela envoie deux requêtes d'écho ICMP et renvoie StatusCode 0 en cas de succès.
Tracer la route avec tracert ou Test-NetConnection
Pour voir le chemin emprunté par les paquets :
tracert 8.8.8.8
Ou en utilisant PowerShell :
Test-NetConnection 8.8.8.8 -TraceRoute
Cherchez où le traçage s'arrête ou montre une latence élevée. Cela indique un problème de routage ou un blocage de pare-feu le long du chemin.
Examiner les ports ouverts sur la machine locale
Utilisez Get-NetTCPConnection pour voir les ports en écoute et les connexions établies :
Get-NetTCPConnection -State Listen | Sort-Object LocalPort | Format-Table LocalAddress, LocalPort, OwningProcess
Identifiez si votre application écoute réellement sur le port attendu. Sinon, le service n'est peut-être pas démarré ou est mal configuré.
Modes de défaillance et récupération
Pannes réseau courantes et comment s'en remettre.
Échec de la résolution DNS
Symptômes : Resolve-DnsName renvoie une erreur ou aucune réponse. Causes possibles : serveur DNS en panne, serveur DNS configuré incorrect, le domaine n'existe pas, cache DNS local corrompu. Étapes de récupération :
- Vérifiez l'adresse du serveur DNS :
Get-DnsClientServerAddress. - Essayez de résoudre avec un DNS public :
Resolve-DnsName example.com -Server 8.8.8.8. - Videz le cache DNS :
Clear-DnsClientCache. - Si cela échoue encore, vérifiez l'état de la carte réseau et redémarrez le service client DNS (nécessite des droits admin) :
Restart-Service -Name Dnscache.
Connexion au port refusée ou délai d'attente
Symptômes : Test-NetConnection montre TcpTestSucceeded: False ou la connexion expire. Causes possibles : service non exécuté, blocage par pare-feu, mauvais port, hôte injoignable. Étapes de récupération :
- Vérifiez que le service est en cours d'exécution :
Get-Service -Name <nomduservice>. - Vérifiez les ports en écoute :
Get-NetTCPConnection -State Listen. - Vérifiez les règles de pare-feu :
Get-NetFirewallRuleet assurez-vous qu'une règle d'autorisation existe pour ce port. - Essayez de vous connecter depuis une autre machine pour isoler s'il s'agit d'un problème de pare-feu local.
Connectivité intermittente
Symptômes : les pings réussissent parfois, échouent à d'autres moments ; paquets perdus. Causes possibles : congestion du réseau, câble défectueux, adresse IP en double, interférences sans fil. Étapes de récupération :
- Exécutez un ping continu pour voir le modèle :
ping -t 8.8.8.8(arrêtez avec Ctrl+C). - Vérifiez les erreurs de la carte réseau :
Get-NetAdapterStatistics. - Mettez à jour le pilote réseau :
Get-NetAdapter | Format-List Name, DriverVersion, DriverDateet comparez avec la dernière version du fabricant. - Vérifiez les conflits d'adresse IP :
Get-NetIPAddress | Format-Table IPAddress, InterfaceAlias, PrefixLengthet assurez-vous que les adresses IP sont uniques.
Liste de contrôle des opérations
Utilisez cette liste de contrôle pour dépanner systématiquement les problèmes réseau avec PowerShell. Remplacez les espaces réservés par vos valeurs spécifiques.
| Étape | Commande | Résultat attendu | En cas d'échec |
|---|---|---|---|
| Vérifier la version de PowerShell | $PSVersionTable.PSVersion | Version 5.1 ou ultérieure | Mettre à niveau PowerShell |
| Vérifier l'état de la carte réseau | Get-NetAdapter | État Up | Activer la carte ou vérifier le câble |
| Vérifier la configuration IP | Get-NetIPConfiguration | IP, passerelle, DNS valides | Renouveler le DHCP ou définir une IP statique |
| Tester la résolution DNS | Resolve-DnsName google.com | Renvoie une adresse IP | Vérifier le serveur DNS, vider le cache |
| Tester la connectivité à la passerelle | Test-Connection -ComputerName <IP passerelle> | Le ping réussit | Vérifier le réseau local, le câble, le commutateur |
| Tester le port vers l'hôte distant | Test-NetConnection <hôte> -Port <port> | TcpTestSucceeded True | Vérifier le service distant, les règles de pare-feu |
| Vérifier les ports en écoute | Get-NetTCPConnection -State Listen | Port attendu listé avec l'ID de processus | Démarrer le service ou corriger la configuration de l'application |
| Tracer la route | tracert <destination> | La route aboutit à la destination | Identifier où le traçage s'arrête, vérifier le routage/pare-feu |
Responsable : Attribuez à une seule personne la responsabilité du dépannage réseau (par exemple, administrateur réseau ou responsable DevOps). Cette personne doit examiner les modifications de configuration réseau mensuellement et après tout déploiement majeur.
Pièges courants et comment les éviter
- Exécuter des commandes sans droits d'administrateur - De nombreuses applets de commande réseau nécessitent une élévation. Exécutez toujours PowerShell en tant qu'administrateur lors de la modification des paramètres ou de l'affichage d'informations détaillées.
- Ne pas vérifier l'état actuel avant les modifications - Exécutez toujours des commandes en lecture seule d'abord et enregistrez la sortie. En cas de problème, vous pouvez revenir en arrière.
- Modifications larges du pare-feu - Au lieu de désactiver le pare-feu, créez des règles étroites pour des ports et protocoles spécifiques.
- Utiliser des applets de commande obsolètes - Par exemple,
Test-Connectiona remplacéping. Utilisez des applets de commande modernes pour un meilleur script. - Ignorer la mise en cache DNS négative - Après avoir résolu un problème DNS, videz le cache pour éviter des résultats périmés.
- Supposer un point de défaillance unique - Les problèmes réseau peuvent être superposés (DNS, routage, pare-feu, application). Testez chaque couche systématiquement.
Conclusion
PowerShell fournit un ensemble robuste d'outils pour le dépannage réseau, de la résolution DNS au test de port et au traçage de route. En suivant les exemples pratiques et la liste de contrôle de cet article, vous pouvez diagnostiquer et résoudre la plupart des problèmes réseau courants efficacement.
Commencez par une vérification à faible risque : vérifiez l'état de votre carte réseau et la résolution DNS. Enregistrez l'état actuel, exécutez les commandes et comparez les résultats. Si vous rencontrez des échecs, utilisez les étapes de récupération pour vous remettre en ligne. Documentez toujours ce que vous avez changé afin que d'autres puissent apprendre et revenir en arrière si nécessaire.
N'oubliez pas que la clé d'un dépannage efficace est d'observer d'abord, de changer une chose à la fois et de vérifier chaque étape. Avec PowerShell, vous avez le pouvoir de rendre les diagnostics réseau scriptables, répétables et sûrs.