[BATCH/Windows] Changer valeur d'une chaine dans la base de registre

Changer valeur d'une chaine dans la base de registre [BATCH/Windows] - Shell/Batch - Programmation

Marsh Posté le 02-04-2009 à 16:35:49    

Bonjour,
 
Ce que je veux faire :
Dans un réseau, toutes les imprimantes vont changer d'adresse IP. Je souhaite automatiser la modification des configs des postes de travail pour éviter de devoir aller sur chaque PC du réseau pour modifier les adresses IP des imprimantes.
Je veux donc lancer un batch qui change dans la base de registre une adresse IP en une autre.
 
Contraintes :
- je ne connais pas à l'avance le nom de la clé exacte où se situe la chaine contenant l'adresse IP. En revanche, je sais dans quelle partie de la BR se trouvent mes valeurs (Ex : "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers" )
- la chaine contenant l'adresse IP peut contenir autre chose (ex : IPPORT_10.1.1.6)
- la chaine à changer peut apparaitre plusieurs fois dans la base de registre : il faut la changer à toutes les occurences.
- tous les PC sont sous WinXP SP3
 
Ce que j'ai essayé :
Je n'ai pas trouvé d'outils permettant de modifier directement la base de registre en batch. Je suis donc parti sur le principe suivant :
 
1 -> extraction d'une clé dans un fichier texte via REG QUERY. C'est OK, j'obtiens un gros fichier texte qui contient, dans le tas, mon adresse IP.
2 -> Changement de toutes les occurences de la chaine "adresse IP" dans ce fichier texte, en la remplaçant par une autre.
3 -> réintégration du fichier texte dans la BR.
 
Là où j'ai besoin d'aide :
Pas de problème pour les étapes 1 et 3. (REGEDIT /E et /S)
En revanche, je bute sur l'étape 2 (je pensais que ce serait le plus simple). Les tentatives que j'ai faites me détruisent mon fichier.
Si je fais "à la main" l'étape 2 (via le bloc note), ça marche très bien.
 
J'ai essayé les méthodes suivantes que j'ai trouvées sur le net :
 - sed : étonnamment, sed me détruit le fichier, me générant dedans des caractères barbares. Il doit y avoir dans l'extraction de la base de registre des symboles qui ne lui plaisent pas.
 - switch : c'est un petit programme qu'on trouve sur le net et qui est sensé faire exactement ce que je veux. Même problème que Sed hélas
 - batch DOS : J'ai tenté un programme DOS comme suit :
 
p1.reg est le fichier extrait de ma BR. p1mod.reg est le fichier modifié : identique à p1, mais avec les IP nouvelles.
 

Code :
  1. for /f "delims=" %%a in ('type "p1.reg"') do call :commande "%%a"
  2. goto :fin
  3. :commande
  4. set ligne=%1
  5. set ligne=%ligne:~1,-1%
  6. set ligne=%ligne:10.0.0.60=10.1.1.60%
  7. echo %ligne% >>p1mod.reg
  8. pause
  9. :fin


Ca marche presque ... mais il y a des bugs.
 
En prenant ce bout extrait de mon registre par exemple :

Code :
  1. Windows Registry Editor Version 5.00
  2. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers]
  3. "DefaultSpoolDirectory"="C:\\WINDOWS\\System32\\spool\\PRINTERS"
  4. [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers\Auto RICOH Aficio MP 4000 RPCS sur SERVEURNAS]
  5. "ChangeID"=dword:003cf894
  6. "Status"=dword:00000080
  7. "Name"="Auto RICOH Aficio MP 4000 RPCS sur SERVEURNAS"
  8. "Share Name"=""
  9. "Print Processor"="WinPrint"
  10. "Datatype"="RAW"
  11. "Parameters"=""
  12. "Action"=dword:00000000


 
La ligne "Name"="Auto RICOH Aficio MP 4000 RPCS sur SERVEURNAS" n'est pas prise en entier.
Je ne comprends pas pourquoi. Mais du coup, mon fichier de sortie est foireux, donc ça ne va pas.
 
 
Si vous avez une idée :
 - soit pour faire marcher ce programme batch
 - soit pour me proposer une solution autre qui réponde à mon besoin initial
vous êtes les bienvenus.
 
Merci
 
LoDeNo
 
 
 
 
 


Message édité par Lodeno le 02-04-2009 à 17:00:03
Reply

Marsh Posté le 02-04-2009 à 16:35:49   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed