## 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-NetFirewallRule et 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, DriverDate et comparez avec la dernière version du fabricant.

- Vérifiez les conflits d'adresse IP : Get-NetIPAddress | Format-Table IPAddress, InterfaceAlias, PrefixLength et 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.

<div class="my-stack-md overflow-x-auto">
<table class="min-w-[42rem] border-collapse text-left">
<thead><tr><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Étape</th><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Commande</th><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">Résultat attendu</th><th scope="col" class="border border-outline-variant bg-surface-container-low px-4 py-3 text-left font-label-md font-semibold text-on-surface">En cas d&#39;échec</th></tr></thead>
<tbody><tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Vérifier la version de PowerShell</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant"><code class="font-mono text-[0.9em] bg-surface-container px-1 py-0.5 rounded">$PSVersionTable.PSVersion</code></td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Version 5.1 ou ultérieure</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Mettre à niveau PowerShell</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Vérifier l&#39;état de la carte réseau</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant"><code class="font-mono text-[0.9em] bg-surface-container px-1 py-0.5 rounded">Get-NetAdapter</code></td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">État Up</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Activer la carte ou vérifier le câble</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Vérifier la configuration IP</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant"><code class="font-mono text-[0.9em] bg-surface-container px-1 py-0.5 rounded">Get-NetIPConfiguration</code></td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">IP, passerelle, DNS valides</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Renouveler le DHCP ou définir une IP statique</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Tester la résolution DNS</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant"><code class="font-mono text-[0.9em] bg-surface-container px-1 py-0.5 rounded">Resolve-DnsName google.com</code></td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Renvoie une adresse IP</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Vérifier le serveur DNS, vider le cache</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Tester la connectivité à la passerelle</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant"><code class="font-mono text-[0.9em] bg-surface-container px-1 py-0.5 rounded">Test-Connection -ComputerName &lt;IP passerelle&gt;</code></td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Le ping réussit</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Vérifier le réseau local, le câble, le commutateur</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Tester le port vers l&#39;hôte distant</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant"><code class="font-mono text-[0.9em] bg-surface-container px-1 py-0.5 rounded">Test-NetConnection &lt;hôte&gt; -Port &lt;port&gt;</code></td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">TcpTestSucceeded True</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Vérifier le service distant, les règles de pare-feu</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Vérifier les ports en écoute</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant"><code class="font-mono text-[0.9em] bg-surface-container px-1 py-0.5 rounded">Get-NetTCPConnection -State Listen</code></td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Port attendu listé avec l&#39;ID de processus</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Démarrer le service ou corriger la configuration de l&#39;application</td></tr>
<tr><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Tracer la route</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant"><code class="font-mono text-[0.9em] bg-surface-container px-1 py-0.5 rounded">tracert &lt;destination&gt;</code></td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">La route aboutit à la destination</td><td class="border border-outline-variant px-4 py-3 align-top text-body-md text-on-surface-variant">Identifier où le traçage s&#39;arrête, vérifier le routage/pare-feu</td></tr></tbody>
</table>
</div>
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-Connection a 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.