[BATCH] Configuration Firefox

Configuration Firefox [BATCH] - Shell/Batch - Programmation

Marsh Posté le 26-10-2006 à 17:25:37    

Bonjour,
 
Je souhaite automatiser la configuration de Firefox sur mes postes clients Windows.
J'ai créé un fichier refs.txt contenant les paramètres que je souhaite imposer :
   user_pref("browser.cache.disk.capacity", 5000);
   user_pref("browser.download.manager.retention", 1);
   user_pref("browser.history_expire_days", 1);
   user_pref("browser.startup.homepage", "http://intranet.monsite.fr" );
   user_pref("network.proxy.autoconfig_url", "http://intranet.monsite.fr/proxy.pac" );
   user_pref("network.proxy.type", 2);
   user_pref("network.cookie.lifetimePolicy", 2);
   user_pref("network.cookie.prefsMigrated", true);
 
qui n'est qu'un sous-ensemble du fichier prefs.js caractérisant le Firefox d'un utilisateur (situé dans %AppData%\Mozilla\Firefox\Profiles\xxxxxxxx.default)
S'il s'agit d'une première connexion, il n'y a pas de problème car prefs.js n'existe pas encore.
Si ce n'est pas le cas, les choses se compliquent un peu car il faut conserver les paramètres de l'utilisateur et forcer les paramètres ci-dessus.
 
Pas trop familier avec les batchs, j'ai écrit le code suivant qui, évidemment, ne produit pas l'effet escompté!
(NB : le séparateur "," me permet d'isoler les noms des attributs de leur valeur)
 
for /f "tokens=1,2 delims=," %%a in ('type prefs.js') do (
  for /f "tokens=1,2 delims=," %%y in ('type refs.txt') do (
    if %%a==%%y (echo %%a %%b >> new-prefs.js)
    if not %%a==%%y (%%y %%z >> new-prefs.js)
  )
)
 
Le problème est que je ne sais pas quitter une boucle for en cours d'itération ni utiliser un booléen dans 2 boucles imbriquées.  
Pour résumer ma problématique : si le fichier prefs.js contient des paramètres présents dans le fichier refs.txt, il faut les remplacer par ces derniers (avec leur valeur)  sinon les conserver.
Merci d'avance de votre aide.
 
NB : si cela intéresse qqn, je peux fournir le code pour paramétrer IE.

Reply

Marsh Posté le 26-10-2006 à 17:25:37   

Reply

Marsh Posté le 26-10-2006 à 18:10:14    

Essaie un autre langage, car le batch et les guillemets dans les fichiers de texte à traiter, ça ne va pas de paire :)
 
Sinon, concernant tes deux questions :
- quitter une boucle : un simple goto vers une étiquette hors de la boucle suffira.
- il n'y a pas d'opérateurs logiques de comparaisons pour combiner deux conditions dans le batch. Il faut deux boucles imbriquées pour ça. Par contre, pour un if not après un if, tu as le else ;)


Message édité par wackevat le 26-10-2006 à 18:11:33
Reply

Marsh Posté le 27-10-2006 à 09:26:53    

Bonjour nglechau,
 
Merci pour ta réponse rapide. Concernant le choix du langage, je n'ai pas le choix puisque cet partie de code s'inscrit dans un script de login situé sur mon PDC LDAP/SAMBA. Je propose une reformulation du problème car en relisant ma prose hier soir je me suis attrapé un mal de tête...
 
f1.txt contient des attributs suivis de leur valeur.
f2.txt contient des attributs (parfois les mêmes) suivis de leur valeur
1/ On génère f3.txt à partir de f2.txt en supprimant les lignes où figurent des attributs référencés dans f1.txt
2/ On ajoute dans f3.txt les lignes de f1.txt
 
f1.txt
attribut3, 5
attribut4, 7
attribut6, 1
 
f2.txt
attribut1, 2
attribut2, 9
attribut4, 6
attribut5, 1
attribut6, 0
attribut7, 3
 
f3.txt (après l'étape 1/ : on a supprimé les attributs 4 et 6)
attribut1, 2
attribut2, 9
attribut5, 1
attribut7, 3
 
f3.txt (après l'étape 2/ : on a ajouté les attributs 3, 4 et 6 de f1.txt)
attribut1, 2
attribut2, 9
attribut3, 5
attribut4, 7
attribut5, 1
attribut6, 1
attribut7, 3
 
Voilà!... Sur le plan fonctionnel c'est imparable mais je n'arrive pas à le coder! Je continue de chercher...

Reply

Marsh Posté le 27-10-2006 à 10:34:05    

Peut-être que ce guide pourrait t'aider au cas où tu ne l'aurais pas déjà lu.

Reply

Marsh Posté le 27-10-2006 à 12:35:07    

hfs06 a écrit :

Je propose une reformulation du problème car en relisant ma prose hier soir je me suis attrapé un mal de tête....


J'avais bien compris, ayant tenté de faire la même chose pour Thunderbird (même système de fichiers de config, inspiré de Netscape) ;)
 
Les difficultés pour réaliser la tâche avec le batch se situent à la présence des guillemets dans le fichier texte à traiter. Sans quoi, les modifs pourraient s'effectuer par exemple comme dans cet exemple :
http://www.robvanderwoude.com/index.html
--> BootIni.bat Change boot menu timeout value in BOOT.INI to 5 seconds

Reply

Marsh Posté le 27-10-2006 à 15:33:44    

wackevat a écrit :

J'avais bien compris, ayant tenté de faire la même chose pour Thunderbird (même système de fichiers de config, inspiré de Netscape) ;)
 
Les difficultés pour réaliser la tâche avec le batch se situent à la présence des guillemets dans le fichier texte à traiter. Sans quoi, les modifs pourraient s'effectuer par exemple comme dans cet exemple :
http://www.robvanderwoude.com/index.html
--> BootIni.bat Change boot menu timeout value in BOOT.INI to 5 seconds


 
Merci nglechau pour tes précisions,
 
Je n'avais pas bien mesuré le problème des guillemets, après quelques heures je commence à comprendre...  :(  
Néanmoins je me demande s'il n'est pas possible dans un premier temps de remplacer les guillemets par un autre caractère, dans un second temps de générer la nouvelle version puis, dans un troisième temps de remettre les guillemets. Ok, ça fait un peu usine à gaz!  :pt1cable: Ne voulant pas perdre trop de temps, j'ai écrit le VBScript suivant (pas très élégant mais ça fonctionne) :
 
set fso=CreateObject("Scripting.FileSystemObject" )
set ipf = fso.OpenTextFile("C:\temp\prefs.js" )
set fso=CreateObject("Scripting.FileSystemObject" )
set opf = fso.CreateTextFile("C:\temp\newprefs.js" )
 
Do While ipf.AtEndOfStream <> True
  currentLine=ipf.readLine
  tmp=split(currentLine,"," )
  if instr(currentLine, "browser.cache.disk.capacity" ) then  
    opf.writeLine tmp(0) & ", 5000);"
  elseif instr(currentLine, "browser.download.manager.retention" ) or instr(currentLine, "browser.history_expire_days" ) then
    opf.writeLine tmp(0) & ", 1);"  
  elseif instr (currentLine, "browser.startup.homepage" & """" ) then
    opf.writeLine tmp(0) & ", " & """" & "http://intranetre.exp.synchrotron-soleil.fr" & """" & " );"
  elseif instr(currentLine, "network.proxy.autoconfig_url" ) then
    opf.writeLine tmp(0) & ", " & """" & "http:intranetre.exp.synchrotron-soleil.fr/proxy.pac" & """" & " );"
  elseif instr(currentLine, "network.proxy.type" ) or instr(currentLine, "network.cookie.lifetimePolicy" ) then
    opf.writeLine tmp(0) & ", 2);"  
  elseif instr(currentLine, "network.cookie.prefsMigrated" ) then
    opf.writeLine tmp(0) & ", true);"  
  else
    opf.writeLine currentLine
  end if
Loop
 
C'est frustrant mais bon... Je l'appelle depuis mon script de login et voilà. Merci encore pour ton aide.
 
Ciao

Reply

Marsh Posté le 28-10-2006 à 00:27:24    

Quitte à passer par du vbs pour les remplacements, autant "éditer" les fichiers directement par ce moyen ;)
 
La syntaxe de remplacement d'une sous-chaîne 1 de cacractères par une chaîne 2 est :
set chaine=%chaine:chaine1=chaine2%
 
set /?
pour plus d'infos.

Reply

Sujets relatifs:

Leave a Replay

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