Triptek
Messages postés17Date d'inscriptionmardi 27 mai 2008StatutMembreDernière intervention15 septembre 2008
-
27 août 2008 à 14:20
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 2013
-
29 août 2008 à 19:16
Bonjour,
J'aurais besoin de votre aide. Mon formateur ma demandé de faire une macro sous excel pour automatisé l'acquisition de données des disque durs des serveurs pour faire des statistiques.
Le principe est de faire un fichier batch qui fera des net use sur les differents disques et récupéré l'espace libre, tout sa redirigé dans un fichier texte.
Ensuite je lis ce fichier texte (sous VB) j'extrait les infos etc... Pour sa pas de problèmes. Seulement lorsque je lance le fichier bat sous VB avec la fonction :
Shell("mon fichier batch.bat")
Le fichier texte qui est générer est vide! Pourtant lorsque je l'exécute manuellement, aucun problème, les redirections on fonctionnées correctement! Est ce un problème avec VB ou alors avec mon fichiers batch? Ce qui est bizarre c'est qu'en manuel sa marche, mais quand VB l'execute, a marche plus ^^
Voilà mon fichier batch :
net use a: \\serveur\c$
dir a: | find "octets libres" > temp.txt
net use a: /d
net use a: \\serveur\d$
dir a: | find "octets libres" >> temp.txt
net use a: /d
net use a: \\serveur\s$
dir a: | find "octets libres" >> temp.txt
net use a: /d
Triptek
Messages postés17Date d'inscriptionmardi 27 mai 2008StatutMembreDernière intervention15 septembre 2008 27 août 2008 à 14:39
Le fichier est présent dans le repertoire courant pour sa aucun problème. Seulement, il ne contient rien! De plus le fichier batch est dans le même repertoire que mon fichier excel ^^ Le fichier est générer, mais est vide.
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 27 août 2008 à 16:50
Salut,
non non pas besoin de reposter ! demande(ici) gentillement a un admin de deplacer le sujet vers le theme VBA
tu peux modifier ton batch avec ce qui suit :
set server=\\serveur\c$
net use a: %server%
if %errorlevel%==2 (
call :erreur_sur_net %server%
) else (
dir a: | find "octets libres" >> temp.txt
net use a: /delete /y
)
set server=\\serveur\d$
net use a: %server%
if %errorlevel%==2 (
call :erreur_sur_net %server%
) else (
dir a: | find "octets libres" >> temp.txt
net use a: /delete /y
)
set server=\\serveur\s$
net use a: %server%
if %errorlevel%==2 (
call :erreur_sur_net %server%
) else (
dir a: | find "octets libres" >> temp.txt
net use a: /delete /y
)
pause
goto fin
:erreur_sur_net
echo la commande net use a echouée sur le %1 >> temp.txt
:fin
ce qui serait pas mal ce serait de passer les noms des serveur en parametre pour simplifier le batch
Triptek
Messages postés17Date d'inscriptionmardi 27 mai 2008StatutMembreDernière intervention15 septembre 2008 28 août 2008 à 12:49
Salut,
Je vais tester sa et je te redis si celà marche. En fait, pour les serveurs y'en à que 2, mais je fais des net use sur 3 disques de chaque serveurs. Pour le passage en paramètre si tu pouvais m'expliquer comment sa marche (j'connais myennement dos) et ensuite pour passer les paramètre sous VB on fait comment?
et pour la recuperation ou pourrait faire un truc comme ça :
set parametre=1
:boucle
set server=%parametre
net use a: %server%
if %errorlevel%==2 (
call :erreur_sur_net %server%
) else (
dir a: | find "octets libres" >> temp.txt
net use a: /delete /y
)
set /a parametre=parametre+1
rem si parametre > que 3
if %parametre%
GTR 3 goto next
goto boucle
:next
pause
goto fin
:erreur_sur_net
echo la commande net use a echouée sur le %1 >> temp.txt
:fin
j'ai pas testé mais cela devrait etre un truc comme ça
Pour info un parametre ce recupere comme ça : %1(est le 1ier parametre) %2(est le 2ieme parametre) %3etc
Triptek
Messages postés17Date d'inscriptionmardi 27 mai 2008StatutMembreDernière intervention15 septembre 2008 29 août 2008 à 08:27
Salut,
je viens de tester et sa ne fonctionne tjrs pas! Le fichier est créer mais reste vide! Je vois vraiment pas pourquoi le fichier reste vide! Celà dit, je sais maintenant passer des paramètres, c'est tjrs sa de gagné ^^
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 29 août 2008 à 19:16
Salut,
d'abord ajoute l'option /i a ta commande find pour ingnorer la casse
dir a: | find /i "octets libres" >> temp.txt
si cela ne suffit pas :
pourrais tu essayer de volontairement passer en parametre des mauvais serveurs pour provoquer une erreur sur net use. En faisant cela tu devrais voir 3 lignes d'erreur apparaitre dans ton fichier texte, comme suit :
la commande net use a echouée sur le serveur: serveur1
la commande net use a echouée sur le serveur: serveur2
la commande net use a echouée sur le serveur: serveur3
si ce n'est pas le cas c'est que tu as un probleme de droit d'ecriture sur ton fichier temp.txt
si finallement tu n'as pas ce probleme remplace remet tes parametres d'origine et remplace dans la ligne suivante :
dir a: | find /i "octets libres" >> temp.txt
"octets libres" par "es" ce qui donne :
dir a: | find /i "es" >> temp.txt
normalement tu devrait trouver dans ton fichier toutes lignes qui contiennent es
si cela marche copie moi ici le contenu de ton fichier temp.txt
par contre avant d'essayer lit la suite car j'ai fait une connerie dans le code precedent(modif en bleu)
set parametre=1
:boucle
set server=%1
net use a: %server%
if %errorlevel%==2 (
call :erreur_sur_net %server%
) else (
dir a: | find /i "octets libres" >> temp.txt
net use a: /delete /y
)
set /a parametre=parametre+1
rem si parametre > que 3
if %parametre% GTR 3 goto next
rem on se decale sur le parametre suivant
shift
goto boucle
:next
pause
goto fin
:erreur_sur_net
echo la commande net use a echouée sur le serveur: %1 >> temp.txt
:fin
A quoi sert le shift ? et bien ici on a besoin de recupperer les parametres un par un or la methode que j'ai utilisée dans mon code precedent ne marche pas car on ne peut pas boucler sur les parametres.
La commande shift permet de ce decaler sur le parametre suivant c'est a dire que le 1er parametre recupperé par %1 sera suprimé et remplacé par le second. Donc %1 prendra la valeur du second parametre et ainsi de suite.