Powershell pour admin Réseau

Powershell pour admin Réseau

Voici les cmdlets PowerShell de diagnostic réseau modernes qui remplacent les commandes MS-DOS ping, tracert, ipconfig, netstat, nslookup, netcat et associés, avec un focus sur le diagnostic rapide et scriptable.

Voir aussi Bien démarrer avec Windows PowerShell de Microsoft Learn

1. Connectivité de base ~ ping ICMP

Objectif : vérifier rapidement si une machine ou un site répond au ping ICMP, et obtenir des stats basiques.

# Ping simple (équivalent ping)
Test-Connection 9.9.9.9 -Count 4

# Ping silencieux pour usage dans des scripts (True/False)
Test-Connection 9.9.9.9 -Count 1 -Quiet

# Traceroute TCP vers un hôte
Test-Connection www.debian.org -TraceRoute

Pour lancer plusieurs tests simultanément :

# Ping multiple hôtes en parallèle avec affichage Vert/Rouge du résultat
"server1","server2","server3" | ForEach-Object {
    $hostname = $_
    $pingResult = Test-Connection $hostname -Count 1 -Quiet -ErrorAction SilentlyContinue
    
    if ($pingResult) {
        Write-Host "$hostname est UP" -ForegroundColor Green
    } else {
        Write-Host "$hostname est DOWN" -ForegroundColor Red
    }
}

2. Connectivité TCP et ports ~ telnet/netcat

Objectif : tester si un port est ouvert / accessible depuis la machine locale (HTTP, HTTPS, RDP, LDAP, etc.).

# Test TCP simple sur un port (équivalent "telnet host port")
Test-NetConnection www.debian.org -Port 443

# Utilisation d’un port « connu » parmi "HTTP,RDP,SMB,WINRM"
Test-NetConnection srv-rdp -CommonTCPPort RDP

# Test rapide avec sortie réduite (booléen)
(Test-NetConnection www.debian.org -Port 443).TcpTestSucceeded

3. Vue d’ensemble de la configuration IP ~ ipconfig

Objectif : récupérer rapidement IP, passerelles, DNS, IPv4/IPv6 par interface.

# Équivalent ipconfig /all
Get-NetIPConfiguration

# Filtrer sur une interface précise (Wi-Fi, Ethernet, etc.)
Get-NetIPConfiguration -InterfaceAlias "Wi-Fi"

# Afficher uniquement les adresses IP de toutes les interfaces
Get-NetIPAddress

# IP d’une interface spécifique
Get-NetIPAddress -InterfaceAlias "Ethernet"

4. État des cartes réseau (up/down, drivers, vitesse)

Objectif : remplacer netsh interface show interface et voir si l’interface est opérationnelle.

# Liste des adaptateurs réseau
Get-NetAdapter

# Détail utile (statut, vitesse, VLAN…)
Get-NetAdapter | Select-Object Name, Status, LinkSpeed, VlanID

# Adapter spécifique
Get-NetAdapter -Name "Ethernet"

# Désactiver / activer une interface (avec précautions)
Disable-NetAdapter -Name "Wi-Fi" -Confirm:$false
Enable-NetAdapter  -Name "Wi-Fi"

5. Table de routage ~ route print

Objectif : comprendre par où part le trafic (routes par défaut, routes vers des subnets spécifiques, VPN, etc.).

# Afficher la table de routage complète
Get-NetRoute

# Route par défaut (IPv4)
Get-NetRoute -DestinationPrefix "0.0.0.0/0"

# Routes liées à une interface donnée
Get-NetRoute -InterfaceAlias "Ethernet"

# Ajouter une route statique (exemple)
New-NetRoute -DestinationPrefix "10.10.0.0/16" -InterfaceAlias "Ethernet" -NextHop 192.168.2.1

À surveiller :

  • Multiple routes par défaut concurrentes (LAN + VPN) → comportements « aléatoires ».
  • Absence de route vers le subnet distant → pas de connectivité malgré une IP valide.

6. Diagnostic DNS ~ nslookup

Objectif : vérifier rapidement si la résolution de noms fonctionne et sur quels DNS.

# Lookup simple
Resolve-DnsName www.debian.org

# Spécifier un serveur DNS particulier
Resolve-DnsName www.debian.org -Server 1.1.1.1

# Type d’enregistrement spécifique
Resolve-DnsName www.debian.org -Type MX

# DNS configurés sur la machine
Get-DnsClientServerAddress

# Infos client DNS (suffixes, policies, etc.)
Get-DnsClient

Cas typiques :

  • Nom ne se résout pas sur le DNS par défaut, mais OK sur 1.1.1.1 → problème de DNS d’entreprise.
  • DNS internes inaccessibles depuis l’extérieur (oubli de route ou de firewall).

7. Cache DNS local

Objectif : voir / vider le cache DNS sans utiliser ipconfig /displaydns.

# Lister le cache DNS
Get-DnsClientCache

# Chercher un enregistrement DNS dans le cache local
Get-DnsClientCache -Name www.debian.org

# Lister tous les enregistrements de type A, NS, CNAME, SOA, PTR, MX, AAAA, SRV
Get-DnsClientCache -Type PTR

# Vider le cache DNS
Clear-DnsClientCache

8. Connexions TCP actives ~ netstat

Objectif : voir qui écoute sur quel port et quelles connexions sont établies.

# Toutes les connexions TCP
Get-NetTCPConnection

# Connexions établies uniquement 
## State parmi: Closed, CloseWait, Closing, DeleteTCB, Established, FinWait1, FinWait2, LastAck, Listen, SynReceived, SynSent, TimeWait, 
Get-NetTCPConnection -State Established

# Qui écoute sur un port donné (ex. 443)
Get-NetTCPConnection -LocalPort 443

# Associer avec le PID / process
Get-NetTCPConnection | Select-Object LocalPort, RemoteAddress, State, OwningProcess

Diagnostic rapide :

  • Service censé écouter sur 443 mais pas de ligne LocalPort 443 → problème de service (non démarré, bind raté).
  • Nombre anormal de connexions dans l’état TimeWait ou CloseWait → pistes d’optimisation ou fuite côté appli.

9. Diagnostic HTTP(S) simple en PowerShell

Objectif : vérifier le comportement applicatif (HTTP/HTTPS) au‑delà du simple port ouvert.

# Requête HTTP/HTTPS basique
Invoke-WebRequest https://www.wikipedia.org -UseBasicParsing

# Vérifier uniquement le code HTTP
(Invoke-WebRequest https://www.wikipedia.org -UseBasicParsing).StatusCode

# Timeout court pour tester latence / bloquage
Invoke-WebRequest https://monapp interne.local `
    -TimeoutSec 5 -UseBasicParsing

Interprétation :

  • Port 443 ouvert mais Invoke-WebRequest en timeout → problème TLS, proxy, inspection SSL ou appli en panne.
  • 200/302 mais appli qui bug côté front → problème applicatif, pas réseau.

10. Kit de commandes « tout‑en‑un » pour un host

Bloc reproductible que tu peux adapter / publier comme « check standard » d’un serveur ou site.

param(
    [Parameter(Mandatory)]
    [string]$TargetHost,

    [int]$Port = 443
)

Write-Host "=== Tests de base sur $TargetHost (port $Port) ==="

# 1. Résolution DNS
Write-Host "`n[DNS] Resolve-DnsName"
Resolve-DnsName $TargetHost -ErrorAction SilentlyContinue

# 2. Ping / ICMP
Write-Host "`n[ICMP] Test-Connection"
Test-Connection $TargetHost -Count 4 -ErrorAction SilentlyContinue

# 3. Test TCP (port)
Write-Host "`n[TCP] Test-NetConnection"
Test-NetConnection $TargetHost -Port $Port

# 4. IP locale & passerelle
Write-Host "`n[LOCAL IP] Get-NetIPConfiguration (résumé)"
Get-NetIPConfiguration |
    Select-Object InterfaceAlias, IPv4Address, IPv6Address, IPv4DefaultGateway, DNSServer

# 5. Connexions TCP locales
Write-Host "`n[TCP LOCAL] Get-NetTCPConnection (Top 20)"
Get-NetTCPConnection | Select-Object -First 20

11. Points de sécurité et bonnes pratiques

  • Toujours exécuter les cmdlets impactant la config (New-NetRoute, Disable-NetAdapter, etc.) dans un contexte contrôlé (session distante, console locale avec accès)..
  • Journaliser les sorties dans les scripts de prod (Export-Csv, logs horodatés) pour disposer d’un historique de diagnostics.
  • Sur des systèmes multi‑VPN, inspecter systématiquement la table de routage et les DNS pour éviter les fuites ou les scénarios de split‑tunneling non maîtrisés.