Bonjour tout le monde,
Je continue sur ce post crée par Arek en 2009(c’est loin quand même) qui m'a été d'une très grande utilité pour développer un script qui renomme mes deux carte réseau carte1 = fmc_l, carte2 = fmc_r et ensuite attribuer d’une façon statique les adresses ip:
fmc_l : 192.168.0.1 mask 255.255.255.0 pas besoin de passerelle
fmc_r : 192.168.1.1 mask 255.255.255.0 pas besoin de passerelle
Même si présentement dans le script, il attribue les passerelles. Bon
Je devrai tester mon script sur deux types de systèmes : winXP(32bits) et Windows7(64bits)(même si les chemins dans la base de registre sont les mêmes), pas encore tester sur win7 32bits.
Une fois adapté, le script marche bien sur winxp32bits sans aucun problème.
Mais une fois exécuté sous windows7 (64bits) j’avais les problèmes suivants :
- Le non de carte réseau change, mais le changement des paramètres TCP/IP ne se fait pas, la carte garde toujours l’ancienne paramétrage TCP/IP.
D’après quelque recherche sur le fonctionnement de la commande netsh, j’ai trouvé sur un forum
http://superuser.com/questions/463096/c ... ith-script la commande suivante : ipconfig | find /I "Ethernet adapter" il marche sous les deux systèmes, cette commande retourne les noms des cartes réseaux.
Puisque le problème se pose juste avec windows7 (64bits), j’ai essaye de revoir la ligne de commande
Code : Tout sélectionner
RunWait ('netsh interface ip set address name=' & $NetCardDescriptors[$k][1] & ' source=static addr=' & $Adresse_ip &$3ip &".1" & ' mask=' & $MASK & ' gateway=' & $GATE & ' gwmetric=0', "", @SW_HIDE )
Peut-être qu’il y’a une différence entre les deux systèmes. Mais c’était pas ça, c’est la même commande pour les deux systèmes.
Le problème était dans le système win7(64bits), alors même si mon script renomme ma carte réseau et je vois le changement dans le panneau de configuration, comme quoi ma carte réseau à le nouveau nom, mais lorsque j’exécute la commande ipconfig | find /I "Ethernet adapter", elle me retourne toujours l’ancien nom de la carte réseau. Si je change le nom manuellement la commande me retourne le nouveau nom. C’est pour cette raison que lorsque j’exécute
Code : Tout sélectionner
RunWait ('netsh interface ip set address name=' & $NetCardDescriptors[$k][1] & ' source=static addr=' & $Adresse_ip &$3ip &".1" & ' mask=' & $MASK & ' gateway=' & $GATE & ' gwmetric=0', "", @SW_HIDE )
sous windows7(64bits), sachant que $NetCardDescriptors[$k][1] contient le nom de ma carte reseau avant le changement par le script, l'application des nouveaux parametres TCP/IP se fait sans aucun probleme.
Sous windows xp(32bits), c'est la meme commande, sauf que la variable qui contient le nom de la carte reseau est la nouvelle apres avoir renommer ma carte par le script aussi.
je n'ai pas encore comris pourquoi, mais en attendant des suggestions, remarques ou pistes de reflexion je vous laisse avec le code au complet:
Code : Tout sélectionner
Global $NetCardDescriptors[10][3]; 0 number
;1 Name of the card
;2 service name
Global $NetCardDescriptors_New [10][3]
Global $Adresse_ip = "192.168."
Global $Adresse_ip1 = "192.168.1.1"
Global $MASK = "255.255.255.0"
Global $GATE = "192.168.1.1"
Global $name = "fmc_"
Global $L = "l"
Global $R = "r"
AutoItSetOption("ExpandEnvStrings", 1)
_GetInfoReseau()
Func _GetInfoReseau()
AutoItSetOption("ExpandEnvStrings", 1)
Global $IniConfigs, $IniNetCard, $Network
Local $k = 0
Local $3ip = 0
Local $i
$i = 0
While 1
$i += 1
$NetCardDescriptors[$i][0] = RegEnumKey("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards", $i)
$NetCardDescriptors[$i][2] = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\" & $NetCardDescriptors[$i][0], "ServiceName")
$NetCardDescriptors[$i][1] = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\" & $NetCardDescriptors[$i][2] & "\Connection", "Name")
If @error <> 0 Then
ExitLoop
EndIf
$NetCardDescriptors[0][0] = $i
WEnd
For $i = 1 To $NetCardDescriptors[0][0]
if $i = 1 Then
$result = RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\" & $NetCardDescriptors[$i][2] & "\Connection", "Name", "REG_SZ", $name & $L)
EnvSet("Name", $name & $R)
EnvUpdate()
ElseIf $i = 2 Then
$result = RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\" & $NetCardDescriptors[$i][2] & "\Connection", "Name", "REG_SZ", $name & $R)
EnvSet("Name", $name & $L)
EnvUpdate()
ElseIf $i = $NetCardDescriptors[0][0] Then
ExitLoop
EndIf
Next
AutoItSetOption("ExpandEnvStrings", 1)
$j = 0
While 1
$j += 1
$NetCardDescriptors_New[$j][1] = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\" & $NetCardDescriptors[$j][2] & "\Connection", "Name")
If @error <> 0 Then
MsgBox (1,"error est la","error")
ExitLoop
EndIf
WEnd
For $k = 1 To 2 ;$NetCardDescriptors[0][0]
MsgBox (1,"name of card1",$NetCardDescriptors_New[$k][1]&$k)
MsgBox (1,"name of card2",$NetCardDescriptors[$k][1]&$k)
RunWait ('netsh interface ip set address name=' & $NetCardDescriptors[$k][1] & ' source=static addr=' & $Adresse_ip &$3ip &".1" & ' mask=' & $MASK & ' gateway=' & $GATE & ' gwmetric=0', "", @SW_HIDE )
$3ip += 1
Next
;$IsDHCP = False
;EndIf
MsgBox(48, "Changement", "La configuration a été appliquée", 2)
EndFunc ;==>_GetInfoReseau