sauvegarde d'environnement .bat / powershell

sauvegarde d'environnement .bat / powershell - Shell/Batch - Programmation

Marsh Posté le 05-08-2015 à 12:35:47    

Bonjour,

 

j'espère que c la bonne sous-cat :o

 

je viens donc vers vous pour un problème assez spécifique :o

 

j'ai un ensemble de fichiers .bat qui font des opérations sur des bases de données. je controle pas vraiment cette partie-là, et moins je la touche, mieux c'est (en fait ces scripts sont pas sous notre responsabilité, ils peuvent évoluer)

 

je les ordonne par powershell (lancer le 1er, vérifier sa sortie et son log, lancer le 2e, vérifier ...), sauf que pour vérifier la sortie, ya un code d'erreur géré dans une variable d'environnement.

 

il faut donc que je sauvegarde l'environnement à la sortie du .bat pour l'importer dans powershell.

 

d'après ce que j'ai vu, ça se fait en appelant cmd.exe /c avec le fichier bat puis set et redirection vers un fichier :
cmd /c "$(chemin complet vers fichier bat) && set >$(chemin complet vers fichier txt contenant la liste des variables d'environnement sorties par set)"

 

quand j'utilise le &&, ça ne marche qu'une fois (un script bat au début qui fait les initialisations), pour les fichiers .bat de "travail", ça ne marche pas (le set n'est pas fait)
comme le && suppose que la première commande réussisse pour que la 2e soit lancée, j'ai esssayé avec "&" tout court, mais là aussi, ça ne marche pas :o
en fait, ça ne marche qu'en faisant ";", sauf que du coup, je récupère dans mon fichier d'import la sortie écran du script bat ... ya moyen d'éviter ça :S ?

 

voilà ce que j'ai actuellement :

Code :
  1. $base = [Environment]::CurrentDirectory=(Get-Location -PSProvider FileSystem).ProviderPath
  2. $import = "$base\impenv.txt"
  3. [. . .]
  4. function lancebat ($batfile) {
  5. cmd /v:ON /e:ON /c "$batfile && set >$import"
  6. $info = new-object system.IO.FileInfo "$import"
  7. if ($info.exists)
  8. { <import ...> }
  9. else
  10. { write-host "erreur" }
 

donc là, je suis quasiment chaque fois en erreur. (sauf au premier appel qui est différent, puisque le fichier bat est une suite de "set" pour les initialisations. les autres fichiers sont bcp plus complexes, ils font des appels sur des binaires des bases de données pour importer / exporter des données ou mettre en forme des fichiers pour d'autres traitements après. ils font une initialisation au début, un appel sur un "debuttravail.bat" et pareil à la fin sur un "fintravail.bat" pour regarder s'il y a eu des erreurs. ils font en plus appel après chaque étape de leurs executions à d'autres fichiers bat qui remplissent et vérifient des logs)

 

j'ai essayé avec "$batfile & set >$import", ça ne marche pas non plus. il me reste "$batfile ; set >$import", mais j'aimerais n'avoir dans $import que le résultat du "set" (qui donne la liste des variables d'environnement quand il est appelé sans rien)

 

si quelqu'un a une idée pour améliorer ou des questions si je suis pas clair ?!

 

merci !


Message édité par misato le 05-08-2015 à 12:41:19

---------------
shibboleet ! - HADOPI vous a plu ? Vous allez adorer la LOPPSI ! - generation NT bande de criminels inconscients !
Reply

Marsh Posté le 05-08-2015 à 12:35:47   

Reply

Marsh Posté le 05-08-2015 à 12:54:40    

bon, il semblerait qu'en fait j'ai pas mis assez de guillemets dans ma chaine d'appel, il faudrait un truc style cmd /c """$batfile"" & ""set >$import""" ... ça a l'air de mieux fonctionner :o


---------------
shibboleet ! - HADOPI vous a plu ? Vous allez adorer la LOPPSI ! - generation NT bande de criminels inconscients !
Reply

Marsh Posté le 06-08-2015 à 12:23:07    

bon, fausse joie, du coup maintenant c'est $batfile qui se lance pas et le set qui me retourne un fichier vide :cry: !


---------------
shibboleet ! - HADOPI vous a plu ? Vous allez adorer la LOPPSI ! - generation NT bande de criminels inconscients !
Reply

Marsh Posté le 06-08-2015 à 14:20:11    

j'ai l'impression d'avoir trouvé un compromis ...
j'ai un premier fichier batch qui est appelé avec plusieurs paramètres, puis tous les autres qui sont appelés sans rien.
 
le premier marche avec "$batfile & set >$import", les autres non.
j'ai fait un test avec $batfile.contains("le nom du premier batch.bat" ), si oui je lance comme ça, sinon je lance "$batfile & ""set >$import"""
 
mais je suis pas convaincu que ça marche sur les autres fichiers bat que le premier :S


---------------
shibboleet ! - HADOPI vous a plu ? Vous allez adorer la LOPPSI ! - generation NT bande de criminels inconscients !
Reply

Sujets relatifs:

Leave a Replay

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