Résolu Batch adressage ip en réseau

explicit59222

Nouveau membre
salut tout le monde

je dois faire un batch assez compliqué: il faut qu'il soit applicable sur 10 machines, qu'il les renomme et change les adresse ip a chaud (adresse IP de type 10.10.10.xxx ) si quelqu'un peut aider se sré gentil merci
 

zeb

Modérateur
Bonjour,

Comme nous ne sommes pas une SSII, nous ne réalisons pas de travaux à la demande. Nous sommes les membres d'une forum où nous entraidons entre développeurs (débutants/novices acceptés).

Si tu as un bout de programme à nous jeter en pâture (lis bien le règlement avant de publier ton code), on pourra commencer à en discuter.
 

zeb

Modérateur
[mode programmeur OFF]
[mode pragmatique ON]
(Et un DHCP correctement configuré sur le réseau, ce n'est pas possible ?)
 

explicit59222

Nouveau membre
c'est un travail pour ma formation je cherche des idées pour réaliser ce batch qui me semble très dur le problème c'est que je ne trouve rien qui puisse m'indiquer les bonnes lignes de commande a insérer
 

zeb

Modérateur
Ah, BennyHeal suppose que tu es sous Windows. Alors l'étude de la fonction netsh s'impose.

Sinon, sous Linux, c'est la commande ifconfig qu'il faudra étudier.
 

explicit59222

Nouveau membre



je suis effectivement obligé de l'utiliser sous windows.je vais faire un tour sur les liens pour voir si je peux trouver quelque chose d'interressant
 

BennyHeal

Shérif
Oops oubli de ma part de stipulé l'environnement. Puis pour le langage, c'est dans le titre alors à quoi bon le répété. :p
 

zeb

Modérateur
Ben le batch, c'est un type de script, pas un langage. Je te fais des batches en korn, en bourne, en perl, en DOS quand tu veux ;)
 

zeb

Modérateur
Moi méchant :( Meuh non :pfff: Je t'engueule pas :o j't'explique. :D
Vlà c'que c'est qu'un batch :
Mauvais programmeur de base, va !

Bon nous, on cause, mais ech tcho chtimi ed Bousies, i n'dit nin chi cha li convient.
 

chrisleform

Nouveau membre



Bonjour,

Le batch n'est pas très dur à la base, le principal est d'écouter les cours qui sont donnés lors de la formation !!!!!!
Toutes les commandes ont été vues et commentées pendant près de trois heures (et oui trois heures d'écoute c'est long).

Pour les autres membres du forum qui souhaite avoir la réponse je me fait plaisir en vous donnant les quelques explications.
Etant le formateur de explicit59222 je reformule la demande :
J'ai demandé de renommer 10 machines à chaud ainsi que d'attribuer une adresse ip fixe, suivant l'adresse mac de la machine.

Résultat :
il faut avoir pour cela un fichier texte avec l'adresse mac de la machine stocké soit sur un réseau, soit sur la machine. Exemple pour une machine ipconfig /all | find "Adresse physique" > xxxx.txt Ceci permet de recuperer la ligne de la mac adresse de la machine (à faire sur les dix machines).

en batch les comparer en faisant un fc fichier1 fichier2 > nul ceci renvoi 0 ou 1
avec errorlevel tester le résultat.

pour renommer une machine à chaud (fonctionne sous xp et vista)

reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v Hostname /t REG_SZ /d XXXXXXX /f
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d XXXXXXXX /f
reg add "HKLM\SYSTEM\ControlSet001\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d XXXXXXXX /f


remplacer les XXXXXXX par le nom de la machine qui doit être renommé.


Pour l'adresse ip

netsh interface ip set address "Connexion au r‚seau local" static <ip> <masque de sous réseau> <passerelle> gwmetric=1

remplacer ce qui est entre < > par les données correspondantes. Donc ici la carte réseau a une ip fixe.


Configuration du dns en static :
netsh interface ip set dns "Connexion au r‚seau local" static <dns>

Et voila plus qu'a incorporer toute ces lignes dans un batch complet permettant de renommer les machines.

Je fournirais un exemple complet du batch lorsque le groupe auras rendu l'exercice demander.

Bon courage à tous.

 

zeb

Modérateur
Salut Chrisleform, soit le bienvenu.

Conformément au règlement, n'hésite pas à mettre tes bouts de programmes entre les balises
Code:
.
 

batchy

Grand Maître
Ton batch ne marche que pour des Windows en Français, et il échoue complètement si on rajoute une carte réseau.

De plus, modifier HKLM\SYSTEM\ControlSet001 :
If you need to modify system settings in the Registry, CurrentControlSet is the best subkey to choose because you know that it is the correct control set.
 

chrisleform

Nouveau membre
Meilleure réponse
Effectivement le batch ne fonctionne que sur un Windows XP en français (les test effectués sous Vista montre que cela fonctionne ; et oui en français aussi :p ). Désolé, je ne suis pas dans une multi nationale qui utilise des versions anglaises, chinoise, russe... et en anglais cela devrait être Physical address

Oui cela echoue si on rajoute une carte réseau, notamment si des logiciels de machines virtuelles sont présentes sur la machine, mais dans la plupart des cas de déploiement de masse, une seule carte réseau est présente sur la machine.
Si plusieurs cartes réseau sont présentes, avec la commande ipconfig /all | find "Adresse physique" > mac.txt toutes les adresses mac sont présentes dans le fichier texte (il faut tester de temps en temps).

Pour la modification des 3 informations dans la base de registre c'est une méthode, il existe des logiciels permettant d'effectuer cette tâches mais non automatique. Pour reprendre la citation oui le controlset001 est la bonne clé de registre, les autres controlset permettent de sauvegarder pour permettre d'effectuer la dernière bonne configuration connue (je ne décrit pas la procédure trop long). :sleep: et Microsoft modifie bien la base de registre lors du renommage de la machine.

Voici comme promis le code, celui ci fonctionne pour 15 machines.
Lire jusqu'au bout une recette est présente :lol: :pt1cable:
ce code reste à modifier selon les besoins

[cpp]@echo off
cls
echo Param‚trage du nom de la machine et de l'adresse IP
ipconfig /all | find "Adresse physique" > c:\salle31.txt
fc c:\salle31.txt c:\applications\macadd\ST3115.txt > nul
if %errorlevel% == 1 goto poste14
if %errorlevel% == 0 goto ST3115

:ST3115
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v Hostname /t REG_SZ /d ST3115 /f
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d ST3115 /f
reg add "HKLM\SYSTEM\ControlSet001\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d ST3115 /f
netsh interface ip set address "Connexion au r‚seau local" static 10.10.11.115 255.255.255.0 10.10.11.100 gwmetric=1
netsh interface ip set dns "Connexion au r‚seau local" static 10.10.11.100
goto FIN

:poste14
fc c:\salle31.txt c:\applications\macadd\ST3114.txt > nul
if %errorlevel% == 1 goto poste13
if %errorlevel% == 0 goto ST3114

:ST3114
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v Hostname /t REG_SZ /d ST3114 /f
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d ST3114 /f
reg add "HKLM\SYSTEM\ControlSet001\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d ST3114 /f
netsh interface ip set address "Connexion au r‚seau local" static 10.10.11.114 255.255.255.0 10.10.11.100 gwmetric=1
netsh interface ip set dns "Connexion au r‚seau local" static 10.10.11.100
goto FIN

:poste13
fc c:\salle31.txt c:\applications\macadd\ST3113.txt > nul
if %errorlevel% == 1 goto poste12
if %errorlevel% == 0 goto ST3113

:ST3113
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v Hostname /t REG_SZ /d ST3113 /f
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d ST3113 /f
reg add "HKLM\SYSTEM\ControlSet001\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d ST3113 /f
netsh interface ip set address "Connexion au r‚seau local" static 10.10.11.113 255.255.255.0 10.10.11.100 gwmetric=1
netsh interface ip set dns "Connexion au r‚seau local" static 10.10.11.100
goto FIN

:poste12
fc c:\salle31.txt c:\applications\macadd\ST3112.txt > nul
if %errorlevel% == 1 goto poste11
if %errorlevel% == 0 goto ST3112

:ST3112
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v Hostname /t REG_SZ /d ST3112 /f
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d ST3112 /f
reg add "HKLM\SYSTEM\ControlSet001\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d ST3112 /f
netsh interface ip set address "Connexion au r‚seau local" static 10.10.11.112 255.255.255.0 10.10.11.100 gwmetric=1
netsh interface ip set dns "Connexion au r‚seau local" static 10.10.11.100
goto FIN

:poste11
fc c:\salle31.txt c:\applications\macadd\ST3111.txt > nul
if %errorlevel% == 1 goto poste10
if %errorlevel% == 0 goto ST3111

:ST3111
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v Hostname /t REG_SZ /d ST3111 /f
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d ST3111 /f
reg add "HKLM\SYSTEM\ControlSet001\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d ST3111 /f
netsh interface ip set address "Connexion au r‚seau local" static 10.10.11.111 255.255.255.0 10.10.11.100 gwmetric=1
netsh interface ip set dns "Connexion au r‚seau local" static 10.10.11.100
goto FIN

:poste10
fc c:\salle31.txt c:\applications\macadd\ST3110.txt > nul
if %errorlevel% == 1 goto poste9
if %errorlevel% == 0 goto ST3110

:ST3110
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v Hostname /t REG_SZ /d ST3110 /f
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d ST3110 /f
reg add "HKLM\SYSTEM\ControlSet001\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d ST3110 /f
netsh interface ip set address "Connexion au r‚seau local" static 10.10.11.110 255.255.255.0 10.10.11.100 gwmetric=1
netsh interface ip set dns "Connexion au r‚seau local" static 10.10.11.100
goto FIN

:poste9
fc c:\salle31.txt c:\applications\macadd\ST3109.txt > nul
if %errorlevel% == 1 goto poste8
if %errorlevel% == 0 goto ST3109

:ST3109
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v Hostname /t REG_SZ /d ST3109 /f
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d ST3109 /f
reg add "HKLM\SYSTEM\ControlSet001\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d ST3109 /f
netsh interface ip set address "Connexion au r‚seau local" static 10.10.11.109 255.255.255.0 10.10.11.100 gwmetric=1
netsh interface ip set dns "Connexion au r‚seau local" static 10.10.11.100
goto FIN

:poste8
fc c:\salle31.txt c:\applications\macadd\ST3108.txt > nul
if %errorlevel% == 1 goto poste7
if %errorlevel% == 0 goto ST3108

:OK
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v Hostname /t REG_SZ /d ST3108 /f
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d ST3108 /f
reg add "HKLM\SYSTEM\ControlSet001\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d ST3108 /f
netsh interface ip set address "Connexion au r‚seau local" static 10.10.11.108 255.255.255.0 10.10.11.100 gwmetric=1
netsh interface ip set dns "Connexion au r‚seau local" static 10.10.11.100
goto FIN

:poste7
fc c:\salle31.txt c:\applications\macadd\ST3107.txt > nul
if %errorlevel% == 1 goto poste6
if %errorlevel% == 0 goto ST3107

:ST3107
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v Hostname /t REG_SZ /d ST3107 /f
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d ST3107 /f
reg add "HKLM\SYSTEM\ControlSet001\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d ST3107 /f
netsh interface ip set address "Connexion au r‚seau local" static 10.10.11.107 255.255.255.0 10.10.11.100 gwmetric=1
netsh interface ip set dns "Connexion au r‚seau local" static 10.10.11.100
goto FIN

:poste6
fc c:\salle31.txt c:\applications\macadd\ST3106.txt > nul
if %errorlevel% == 1 goto poste5
if %errorlevel% == 0 goto ST3106

:ST3106
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v Hostname /t REG_SZ /d ST3106 /f
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d ST3106 /f
reg add "HKLM\SYSTEM\ControlSet001\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d ST3106 /f
netsh interface ip set address "Connexion au r‚seau local" static 10.10.11.106 255.255.255.0 10.10.11.100 gwmetric=1
netsh interface ip set dns "Connexion au r‚seau local" static 10.10.11.100
goto FIN

:poste5
fc c:\salle31.txt c:\applications\macadd\ST3105.txt > nul
if %errorlevel% == 1 goto poste4
if %errorlevel% == 0 goto ST3105

:ST3105
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v Hostname /t REG_SZ /d ST3105 /f
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d ST3105 /f
reg add "HKLM\SYSTEM\ControlSet001\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d ST3105 /f
netsh interface ip set address "Connexion au r‚seau local" static 10.10.11.105 255.255.255.0 10.10.11.100 gwmetric=1
netsh interface ip set dns "Connexion au r‚seau local" static 10.10.11.100
goto FIN

:poste4
fc c:\salle31.txt c:\applications\macadd\ST3104.txt > nul
if %errorlevel% == 1 goto poste3
if %errorlevel% == 0 goto ST3104

:ST3104
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v Hostname /t REG_SZ /d ST3104 /f
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d ST3104 /f
reg add "HKLM\SYSTEM\ControlSet001\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d ST3104 /f
netsh interface ip set address "Connexion au r‚seau local" static 10.10.11.104 255.255.255.0 10.10.11.100 gwmetric=1
netsh interface ip set dns "Connexion au r‚seau local" static 10.10.11.100
goto FIN

:poste3
fc c:\salle31.txt c:\applications\macadd\ST3103.txt > nul
if %errorlevel% == 1 goto poste2
if %errorlevel% == 0 goto ST3103

:ST3103
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v Hostname /t REG_SZ /d ST3103 /f
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d ST3103 /f
reg add "HKLM\SYSTEM\ControlSet001\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d ST3103 /f
netsh interface ip set address "Connexion au r‚seau local" static 10.10.11.103 255.255.255.0 10.10.11.100 gwmetric=1
netsh interface ip set dns "Connexion au r‚seau local" static 10.10.11.100
goto FIN

:poste2
fc c:\salle31.txt c:\applications\macadd\ST3102.txt > nul
if %errorlevel% == 1 goto poste1
if %errorlevel% == 0 goto ST3102

:ST3102
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v Hostname /t REG_SZ /d ST3102 /f
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d ST3102 /f
reg add "HKLM\SYSTEM\ControlSet001\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d ST3102 /f
netsh interface ip set address "Connexion au r‚seau local" static 10.10.11.102 255.255.255.0 10.10.11.100 gwmetric=1
netsh interface ip set dns "Connexion au r‚seau local" static 10.10.11.100
goto FIN

:poste1
fc c:\salle31.txt c:\applications\macadd\ST3101.txt > nul
if %errorlevel% == 1 goto fin
if %errorlevel% == 0 goto ST3101

:ST3101
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v Hostname /t REG_SZ /d ST3101 /f
reg add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d ST3101 /f
reg add "HKLM\SYSTEM\ControlSet001\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d ST3101 /f
netsh interface ip set address "Connexion au r‚seau local" static 10.10.11.101 255.255.255.0 10.10.11.100 gwmetric=1
netsh interface ip set dns "Connexion au r‚seau local" static 10.10.11.100
GOTO FIN

:FIN
[/cpp]


La recette : vive le DOS !!!
 

batchy

Grand Maître

Le lien que j'ai montré indique spécifiquement que ça n'est pas forcement le cas, et que les applications devrai utiliser CurrentControlSet. Non seulement ça permet au mécanisme de sauvegarde de la dernière bonne configuration de fonctionner, mais ça marche partout, puisque le controlset par défault est spécifié dans une autre clef de registre (et il n'est pas forcement 001).
 

zeb

Modérateur
Mais quelle horreur ce code !
Si c'est pour une étude et qu'une note doit être donnée, ça vaut 10/20 !
Ben oui, ça fait le boulot, donc la moyenne, mais c'est tellement mal fait.

La remarque de Batchy reste pertinente. Utilise CurrentControlSet.
Mais surtout, fais-moi le plaisir d'utiliser une boucle :
Code:
FOR /L %%I IN (1,1,15) DO (
   ...
)
La commande pour lister les adresses mac, c'est getmac.
 

zeb

Modérateur
Je ne résiste pas au plaisir de vous proposer de télécharger les GnuWin32Tools pour décupler la puissance de vos scripts !

head, tail, cut, paste, grep, sed, awk, ...

Sous DOS !

 

batchy

Grand Maître
Ah mon dieu, j'avais même pas lu.

Pourquoi un for sur des nombres, alors que for est si bon pour lister des fichiers ?
Code:
for %%i in ("c:\applications\macadd\ST*.txt") do ....
Avec en prime un call %%i.bat pour avoir une conf séparée ...
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 137
Messages
6 718 161
Membres
1 586 399
Dernier membre
mehdivil59
Partager cette page
Haut