IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

WOL automatisé batch DOS


Sujet :

Windows

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut WOL automatisé batch DOS
    Bonjour,
    Étant en stage pendant une durée de 3 mois, j'ai comme mission de réaliser un script (qui sera automatisé) prenant une liste des postes (MAC, IP, Masque, NomDNS) au format CSV généré par un pack d'administration personnalisé (créé à partir d'une requête SQL directement sur la BDD de SCE).
    Le script est sensé exécuter le module WolCmd.exe pour toutes les machines présentes dans mon fichier CSV (pour ensuite faire un scan anti-virus, forcer le téléchargement et l'installation des MAJ via SCE).

    Jusqu'ici, je suis arrivé à traiter toutes les lignes de ma liste, seulement il me manque un petit coup de pouce pour que mon script fonctionne parfaitement.

    Je vous joins mon script batch DOS (commandes 'sed' et 'tr' utilisées grâce à deux modules .exe que j'ai exporté du programme 'GNUWin32') :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    @echo off
    echo ----------------------------------------------------------------------------- > D:\log_WOL.txt
    date /t >> D:\log_WOL.txt
    time /t >> log_WOL.txt
    echo ----------------------------------------------------------------------------- >> D:\log_WOL.txt
    echo. >> D:\log_WOL.txt
    
    echo **************************** Démarrage du script **************************** >> D:\log_WOL.txt
    echo. >> D:\log_WOL.txt
    echo ----------------------------------------------------------------------------- >> D:\log_WOL.txt
    
    echo. >> D:\log_WOL.txt
    C: 
    cd ../../../
    cd Program Files\GnuWin32\bin
    sed '1d' <D:\AdresseMac.csv | tr -d - >D:\AdresseMacOK.csv
    
    echo ********************** Mise en forme du fichier CSV OK ********************** >> D:\log_WOL.txt
    echo. >> D:\log_WOL.txt
    echo ----------------------------------------------------------------------------- >> D:\log_WOL.txt
    
    echo. >> D:\log_WOL.txt
    echo **************************** Réveil des machines **************************** >>D:\log_WOL.txt
    echo. >> D:\log_WOL.txt
    
    D:
    FOR /F "tokens=1,2,3,4 delims=," %%a IN (D:\AdresseMacOK.csv) DO (
    	D:\WolCmd.exe %%a %%b %%c 7
    	echo Envoi du Wake On LAN sur la machine %%d >>D:\log_WOL.txt
    	PING %%b -n 1 | FIND "TTL="
    	IF %ERRORLEVEL% EQU 0 (( echo La machine %%d est réveillée)) else (( echo La machine %%d n'est pas réveillée))
    	echo. >>D:\log_WOL.txt
    )
    Où %%a = MAC
    %%b = IP
    %%c = Masque
    %%d = Nom DNS

    J'ai comme résultat affiché soit 'La machine x est réveillée' si le ping est répondu, et les deux ('...est réveillée' et '...n'est pas réveillée') lorsque je ne reçois pas de réponse de la machine pinguée.

    J'ai isolé mon erreur en testant un script qui fonctionne correctement tel que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     PING 127.0.0.1 -n 1 | FIND "TTL="
    IF %ERRORLEVEL% EQU 0 ( echo TTL Trouve pour l'adresse 127.0.0.1) else ( echo TTL Non Trouve pour l'adresse 127.0.0.1)
    
    PING 127.0.0.0 -n 1 | FIND "TTL="
    IF %ERRORLEVEL% EQU 0 ( echo TTL Trouve pour l'adresse 127.0.0.0) else ( echo TTL Non Trouve pour l'adresse 127.0.0.0)
    J'aimerai savoir si le IF/ELSE est utilisable dans ma boucle FOR. C'est pour cette raison que je fais appelle à vous (pour la première fois), pros du développement apparemment ^^ !

    Merci d'avance.

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Petit ajout :

    Notepad++, pour le petit script test que j'ai mentionné à la fin de mon premier poste, affiche le 'else' en noir.
    Lorsque j'affiche 'La machine x est/n'est pas réveillée' dans la console, il m'affiche le 'else' en noir également (voir image 1), cependant il est affiché en bleu dès que je modifie la sortie standard dans mon fichier log (voir image 2).


    Image 1


    Image 2

    Dans les deux cas le résultat est malgré tout le même, à savoir :
    affichage de 'La machine x est réveillée' ou 'La machine x est réveillée'+'La machine x n'est pas réveillée'.

    Je ne sais plus vraiment d'où l'erreur pourrait venir mis à part l'utilisation du IF dans ma boucle FOR...

    J’espère avoir été clair, et que vous pourrez m'aider !!

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    J'ai ajouté la commande et je me suis rendu compte que la valeur de cette variable (résultat de ma dernière commande) restait inchangée que le ping arrive ou non.
    Sauriez-vous comment fixer la valeur de ma variable afin de l'utiliser comme condition pour mon IF ?

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    J'ai finalement trouvé une solution à mon problème, c'était donc le IF dans ma boucle FOR qui merdouillait.
    Je poste le code au cas où quelqu'un aurait un soucis similaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for /f " delims= " %%e in ('PING %%b -n 1 ^| findstr /i /c:"TTL="') do echo La machine %%d est reveillee >>D:\log_WOL.txt
    for /f " delims= " %%e in ('PING %%b -n 1 ^| findstr /i /c:"Destination"') do echo La machine %%d n'est pas reveillee >>D:\log_WOL.txt

Discussions similaires

  1. Batch Dos sous XP : créer un shared folder
    Par jeff37 dans le forum Windows XP
    Réponses: 2
    Dernier message: 06/03/2006, 10h27
  2. Sauvegarde par un batch dos
    Par faayy dans le forum Access
    Réponses: 24
    Dernier message: 22/06/2005, 21h12
  3. [BATCH-DOS] Sur quel forum poster ?
    Par Beaunico dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 17/09/2004, 18h30
  4. un batch DOS pour "nettoyer des fichiers" ?
    Par RoroMinator dans le forum Scripts/Batch
    Réponses: 9
    Dernier message: 12/02/2004, 16h24
  5. Réponses: 5
    Dernier message: 01/10/2003, 15h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo