PI Services

Le blog des collaborateurs de PI Services

Powershell–Gestion du réseau

Contexte

Il arrive souvent lors de l’installation de certains produits ou fonctionnalitée de devoir réaliser des opérations de vérification des pré-requis. Le premier pré-requis a satisfaire concerne souvent le réseau:

  • Suis-je en capacité de joindre ma passerelle?
  • Le ou les contrôleurs hébergeant les rôles FSMO sont-ils joignable?
  • Mes serveurs DNS sont-ils joignable?

Pour réaliser ces opérations sur quelques serveurs cela peut être réalisé manuellement, mais lorsque le nombre de serveur est conséquent, cela peut s’avéré fastidieux. Je vous propose de travailler en powerShell pour simplifier/automatiser cette opération.

Etape 1: récupérer la configuration de machine

Pour cela rien de bien compliquer, la commande ipconfig /all nous retourne l’ensemble des éléments nécessaire:

image

Maintenant il faut pouvoir isolé chaque paramètre de réponse (ici identifiés de 1 a 6). Pour cela un traitement sur le retour d’ipconfig est nécessaire:

  1. 1. Adresse IPv4:  ((ipconfig | findstr [0-9].\.)[0]).Split()[-1]
  2. 2. Masque : ((ipconfig | findstr [0-9].\.)[1]).Split()[-1]
  3. 3 Passerelle : ((ipconfig | findstr [0-9].\.)[2]).Split()[-1]
  4. 4 Serveur DHCP : ((ipconfig /all| findstr [0-9].\.)[3]).Split()[-1]
  5. 5 DNS Principal : ((ipconfig /all| findstr [0-9].\.)[5]).Split()[-1]
  6. 6 DNS Secondaire ((ipconfig /all| findstr [0-9].\.)[6]).Split()[-1]

 

Etape 2: Exécuter un ping en powershell

Pour réaliser cette opération les commandes suivante nous retourne un résultat contenant les valeur attendu:

image

  • new-object System.Net.NetworkInformation.ping
  • $reply = $ping.Send("192.168.0.254")

Nous savons donc que le ping a fonctionné au travers du status. qu’il reste a isoler puis a traiter. Pour l’isolation, l’utilisation des variables nous simplifie la tache:

image

Etape 3: Automatisation des résultats

Afin de valider le bon fonctionnement des pré-requis lié au réseau, nous pouvons traiter les retours au travers de différents moyens, pour ma part, je préfère utilisé les conditions au travers du If – Else

   1: #***** Stockage des parametre dans une variable*****#
   2:     $IP= ((ipconfig | findstr [0-9].\.)[0]).Split()[-1]
   3:     $IPMask= ((ipconfig | findstr [0-9].\.)[1]).Split()[-1]
   4:     $IPgtw= ((ipconfig | findstr [0-9].\.)[2]).Split()[-1]
   5:     $IPDHCP=((ipconfig /all| findstr [0-9].\.)[3]).Split()[-1]
   6:     $DNS1=((ipconfig /all| findstr [0-9].\.)[5]).Split()[-1]
   7:     $DNS2=((ipconfig /all| findstr [0-9].\.)[6]).Split()[-1]
   8:  
   9: #**Test passerelle**#
  10:     $reply = ""
  11:     $status =""
  12:     $ping = new-object System.Net.NetworkInformation.ping
  13:     $reply = $ping.Send($IPgtw)
  14:  
  15: if ($reply.status -eq "success")
  16:     {
  17:     write-host "Passerelle joignable" -foregroundColor green
  18:     }
  19:     Else
  20:     {
  21:     write-host "Passerelle injoignable" -foregroundColor red
  22:     }
  23:  
  24: #**Test DHCP**#
  25:     $reply = ""
  26:     $status =""
  27:     $ping = new-object System.Net.NetworkInformation.ping
  28:     $reply = $ping.Send($IPDHCP)
  29:  
  30: if ($reply.status -eq "success")
  31:     {
  32:     write-host "DHCP joignable" -foregroundColor green
  33:     }
  34:     Else
  35:     {
  36:     write-host "DHCP injoignable" -foregroundColor red
  37:     }
  38: #**Test passerelle**#
  39:     $reply = ""
  40:     $status =""
  41:     $ping = new-object System.Net.NetworkInformation.ping
  42:     $reply = $ping.Send($DNS1)
  43:  
  44: if ($reply.status -eq "success")
  45:     {
  46:     write-host "DNS joignable" -foregroundColor green
  47:     }
  48:     Else
  49:     {
  50:         $reply = ""
  51:         $status =""
  52:         $ping = new-object System.Net.NetworkInformation.ping
  53:         $reply = $ping.Send($DNS2)
  54:         if ($reply.status -eq "success")
  55:             {
  56:             write-host "DNS joignable" -foregroundColor green
  57:             }
  58:             Else
  59:             {
  60:             write-host "DNS injoignable" -foregroundColor red
  61:             }        
  62:     }
  63:  

Le résultat positif retourne:

image

Le résultat négatif retourne:

image

Conclusion

Cette vérification permet de réaliser un enchainement de script ou d’action si et seulement si les paramètres réseaux sont correct. Par exemple en créant un flag si les résultats sont positif !

Ajouter un commentaire

Loading