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:
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. Adresse IPv4: ((ipconfig | findstr [0-9].\.)[0]).Split()[-1]
- 2. Masque : ((ipconfig | findstr [0-9].\.)[1]).Split()[-1]
- 3 Passerelle : ((ipconfig | findstr [0-9].\.)[2]).Split()[-1]
- 4 Serveur DHCP : ((ipconfig /all| findstr [0-9].\.)[3]).Split()[-1]
- 5 DNS Principal : ((ipconfig /all| findstr [0-9].\.)[5]).Split()[-1]
- 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:
- 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:
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:
Le résultat négatif retourne:
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 !