Je post ici un script que j'ai fait, qui pourrait être utile à quelqu'un d'autre que moi...
Dans le cadre de mon travail, j'ai eu besoin de gérer "dynamiquement" la configuration IP alternative de la carte réseau avec une contrainte : la configuration alternative doit être la dernière configuration IP fonctionnelle obtenue.
Pour info (pour ce qui ne connaissent pas), la configuration IP alternative sert à obtenir une configuration IP même si aucun serveur DHCP ne répond. Cela permet dans mon cas de mettre en place une solution de secours en cas de défaillance du serveur DHCP et/ou du Firewall, tout en étant sûr de ne pas provoquer de conflit d'adresse IP(car environ 50 postes dans cette salle).
Le script doit s'exécuter sur chaque poste à l'ouverture de session : on utilise l'option -install pour cela.
Désolé si c'est pas clair, c'est pas évident à expliquer....
N'hésitez pas à laisser vos commentaires ...
Code : Tout sélectionner
#NoTrayIcon
Break (0)
If NOT IsAdmin() Then
$login = "administrateur"
$passw = "P@ssW0rd!"
RunAs($login, @ComputerName, $passw, 0, @ScriptFullPath, @ScriptDir )
Exit
EndIf
If $CmdLine[0] == 1 Then
If $CmdLine[1] == "-install" Then
RegWrite("HKLM\Software\Microsoft\Windows\CurrentVersion\Run", "DHCPSecours", "REG_SZ", @ScriptFullPath)
Exit
EndIf
EndIf
; Lecture du fichier de configuration
$alternateMasque = "255.255.255.0"
$alternateGW = "192.168.1.1"
$alternateDNS1 = "192.168.1.253"
$alternateDNS2 = "192.168.1.254"
; Avant de commencer, on effectue un ping de la passerelle afin de verifier qu'on a bien de reseau
; On attend une minute, histoire que le DHCP ait attribué une adresse
$wait = 1
$debut = TimerInit()
While TimerDiff($debut) < 60000
If Ping($alternateGW) > 0 Then
$wait = 0
ExitLoop
EndIf
Sleep(5000) ; On attend 5 secondes avant de tester a nouveau
WEnd
; Si le temps d'attente est dépassé et qu'on a toujours pas de réseau, on quitte
If $wait Then Exit
; Trouve l'identifiant de la carte réseau
$num = RegEnumKey("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards", 1)
$networkCardID = RegRead( "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\" & $num, "ServiceName" )
$chaine0 = "0x32000000000000000400000000000000FFFFFF7F"
$chaine1 = "01000000000000000400000000000000FFFFFF7F"
$chaine2 = "03000000000000000400000000000000FFFFFF7F"
$chaine3 = "06000000000000000800000000000000FFFFFF7F"
; La chaine qui contient la configuration alternative complète
$chaine = $chaine0 & _IPToHex(@IPAddress1) & $chaine1 & _IPToHex($alternateMasque) & $chaine2 & _IPToHex($alternateGW) & $chaine3 & _IPToHex($alternateDNS1) & _IPToHex($alternateDNS2)
; On "écrit dans la base de registre la nouvelle configuration alternative
RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dhcp\Configurations\Alternate_" & $networkCardID, "options", "REG_BINARY", Binary($chaine) )
; On active la configuration alternative
RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\" & $networkCardID, "ActiveConfigurations", "REG_MULTI_SZ", "Alternate_" & $networkCardID)
Func _IPToHex($IP)
$decoupeIP = StringSplit($IP, ".")
$hexIP1 = StringRight(hex($decoupeIP[1]), 2)
$hexIP2 = StringRight(hex($decoupeIP[2]), 2)
$hexIP3 = StringRight(hex($decoupeIP[3]), 2)
$hexIP4 = StringRight(hex($decoupeIP[4]), 2)
; Adresse IP en hexa à écrire dans la base de registre
$IPHexa = $hexIP1 & $hexIP2 & $hexIP3 & $hexIP4
return $IPHexa
EndFunc