Bonjour,
j'espère que c la bonne sous-cat
je viens donc vers vous pour un problème assez spécifique
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
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 :
- $base = [Environment]::CurrentDirectory=(Get-Location -PSProvider FileSystem).ProviderPath
- $import = "$base\impenv.txt"
- [. . .]
- function lancebat ($batfile) {
- cmd /v:ON /e:ON /c "$batfile && set >$import"
- $info = new-object system.IO.FileInfo "$import"
- if ($info.exists)
- { <import ...> }
- else
- { 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 !