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

AppleScript Discussion :

Developpez un WOL avec applescript


Sujet :

AppleScript

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2008
    Messages : 24
    Points : 21
    Points
    21
    Par défaut Developpez un WOL avec applescript
    Bonjour,
    Je suis tout nouveau dans l'univers Apple.
    J'aimerai savoir s'il est possible de scripter un wol (wake on lan) avec applescript ?
    je sait qu'il existe des softs qui font très bien le job, mais pour me familiariser avec mon nouvel apple (MBA) je voudrais mettre les mains dans le cambouis...

    Si quelqu'un à une piste je suis preneur.

    Merci

  2. #2
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonjour Kalouk,
    Bienvenu dans le monde Applescript !

    D'abord, pour faire court : oui, c'est tout à fait possible.
    Tout au moins je sais le faire dans un réseau interne. Je ne me suis pas penché sur un appel via Internet, mais cela devrait aussi être possible, avec toutefois la complexité d'identification et de passage du parefeu... !
    Donc on va le faire sur le réseau local !

    En fait, comme tu vas le découvrir petit à petit, AppleScript permet de mélanger les langages grâce à une instruction "do shell script" qui permet, au milieu d'un script, de lancer une ou des instructions comme sur le Terminal, c'est à dire en shell Unix, en Python, PERL, ou autre...

    Dans le cas du WOL, j'utilise pour ma part une instruction Shell Unix. Cette instruction n'existe pas en natif, aussi faut-il télécharger un petit programme (je ne me souviens plus sur quel site je l'avais trouvé en 2005 - que ses programmeurs R. Edwards et G. Knauf en soit remerciés !).

    Cette commande sera placée là où tu le souhaites, et ensuite appelée via un AppleScript. Donc commence par télécharger le fichier ZIP ci joint ->:wol.zip

    Une fois décompressé, c'est un dossier WOL qui contient la commande "wol" unix dont nous avons besoin, et la source en C "wol.c". Tu places ce dossier où tu veux sur ton disque car le script ira le chercher par son chemin.

    Pour vérifier que tout va bien à ce stade, tu peux déjà ouvrir le Terminal et tester la commande comme suit :
    1) Sur le Mac que tu veux réveiller, vérifies dans les Préférences Système / Partage qu'il peut être réveillé via le réseau (cette partie dépend de ta version système. Cela existe au moins à partir de la 10.5).
    2) Sur ce même Mac, relève la MAC adresse de sa carte réseau (préférence Réseau). Cette adresse caractérise ta carte réseau (en principe seuls les hackeurs peuvent la changer !). Elle est composée de 6 groupes de 2 caractères hexa-decimaux (0 à 9 et A à F), par exemple "00:25:AC:07:AF:3C"
    3) sur le Terminal, glisse et dépose le fichier WOL à partir de là où tu l'a mis (le Terminal va afficher son chemin complet), tape un espace, puis la MAC adresse (sans les guillemets).
    4) tape Return et ton Mac distant doit s'allumer !! Cela peut prendre quelques secondes, mais cela doit marcher. Pour ma part, j'ai parfois des non réceptions du paquet, mais c'est rare.

    Maintenant passons au script AS :
    Il suffit que celui-ci exécute la même chose. Admettons que la ligne de Terminal précédente soit : HD/Mon_Dossier/wol/wol 00:25:AC:07:AF:3C
    Le script sera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    do shell script "HD/Mon_Dossier/wol/wol 00:25:AC:07:AF:3C"
    Notons au passage que le Terminal a peut être ajusté le chemin d'accès (par exemple si il contient des espaces) car Unix est assez strict sur les chemins. Raison de plus pour copier :coller ce qu'a fait le Terminal (il existe aussi d'autres astuces en AS, mais ne mélangeons pas tout !)

    En pratique, on mettra les valeurs possibles des adresses Mac de ton réseau personnel dans une liste et on demandera à l'utilisateur de choisir quel Mac il veut réveiller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Set Ma_List to {"00:25:AC:07:AF:3C", "00:25:26:27:AC:FF", "00:4E:5C:A6:FC:C9"} -- 3 machines sur ton réseau
    Set Mes_Adresses to choose from List Ma_List with title "adresse à réveiller" OK button name "Réveiller" cancel button name "Annuler" with multiple selections allowed and empty selection allowed
    
    if result =false then return
    
    Repeat with Adr in Mes_Adresses
       do shell script "HD/Mon_Dossier/wol/wol " & (Adr as string)
    end repeat
    La boucle est là pour permettre à l'utilisateur de sélectionner toutes les machines qu'il souhaite, et les réveiller une par une.

    Personnellement, mon AppleScript est un peut plus compliqué, car au lieu de présenter à la sélection les adresses MAC, je présente le nom des machines et, une fois connue chaque machine, le script lis l'adresse MAC à partir d'une seconde liste (Nom_Machine, Adresse_MAC). C'est plus sympa à retenir que les adresse Mac (j'ai 6 machines !)

    Voilà qui, j'espère, réponds à ta question !

    Cordialement

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2008
    Messages : 24
    Points : 21
    Points
    21
    Par défaut merci
    En premier lieu je tient à te remercier pour ta réponse très complète et surtout du temps que tu as bien voulu y consacrer.
    En effet tu as bien répondu à la question posée, mais je n'ai pas été très précis dans ma formulation, je m'en excuse.

    En fait je voulais savoir s'il était possible de créer un script, mais sans logiciel tiers... Ce qui est un peu différent, même si le résultat revient in fine au même.
    De plus la machine que je désire "réveiller" est un pc portable dont l'écran est mort est sur lequel j'ai installé un moniteur. Comme je suis tétraplégique il m'est difficile de déplacer l'écran pour ouvrir le capot est appuyer sur le bouton de démarrage, mais ça c'est un détail.

    Donc je voulais connaitre la procédure globale :
    - constitution du paquet magique ?
    - l'algo pour l'envoi à la machine cible, protocole, fréquence d'envoi des paquets ? etc.
    Mes connaissances en C est dans les machines UNIX datent de la FAC ayant 55 balais je te laisse imaginer la mise à jour que je dois faire pour le CPU que j'ai entre mes 2 oreilles

    je vais quand même analyser la procédure que tu m'a si bien décrite pour voir si j'arrive à en extraire une amorce de solution.

    En te remerciant encore.

    PS
    Si tu connais la réponse à mes deux questions je suis également preneur.

  4. #4
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonsoir,
    Le paquet magique est assez simple, et il est décrit sur wiki http://fr.wikipedia.org/wiki/Wake-on-LAN

    Quant à son mode d'envoi, j'ai aussi oublié depuis longtemps comment faire (j'ai peur d'avoir la même version de système que toi entre mes oreilles !)
    Comment préparer un socket et envoyer un paquet en UDP... ? Surement via Unix avec un script qui pourra être appelé en Applescript.
    Mais on en reviendra à quelque chose de similaire wol indiqué.


    Bon courage !

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2008
    Messages : 24
    Points : 21
    Points
    21
    Par défaut Script wol suite...
    Je pense que tu as raison, j'ai regardé le fichier en C est cela ne servirait à rien de réinventer la roue.
    Par contre j'ai une question à deux balles, enfin pour des développeurs !

    j'ai repris ton script, mais j'aimerai ajouter un test permettant d'afficher un message du type :
    "L'opération s'est terminée avec succès" ou l'inverse si c'est le cas.
    J'ai testé avec ;

    if result = 0 then display dialog " L'opération s'est terminée avec succès"
    else display dialog "echec"

    Ben résultat rien, ni message d'erreur ni affichage. J'y suis allé à l'intuition mais à priori mon coté féminin n'est pas assez évolué, pour ce qui est de l'intuition
    aurais-tu une pistouille ?

    L’intérêt c'est que le pc étant distant je voudrais m'éviter des pas, euh !!! des tours de roues inutiles !

  6. #6
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonjour,
    Effectivement l'instruction wol développée en c est une instruction muette, c'est à dire qu'elle ne renvoie pas de message (ni OK, ni erreur). Elle se contente d'envoyer le paquet magique, un point c'est tout.

    Cependant j'ai eu la même préoccupation et j'ai contourné le problème avec d'autres instructions.
    La question est de savoir ce que tu va faire avec le Mac réveillé (ou qui devrait l'être), et de mettre un test pour savoir si il réponds correctement à ces instructions.

    Par exemple, si on veut accéder à son disque dur, il faut d'abord "mounter" le volume de ce disque. L'instruction Mount sera donc dans un bloc try qui permet de détecter si il réponds ou pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    tell application "Finder"    
      try
        mount volume "afp://Mon_Mac.home/DossierAAA" as user name "Kalouk" with password "xxxxx"
      on error
        display dialog "Erreur de connexion" & return & return & ¬
                "Réessayez plus tard" & return & return & ¬
                "ou relancer l'allumage à distance " buttons {"Fin"} default button 1        
    -- si erreur, fin du script
        return
      end try
    end tell
    On peut ne pas sortir du script ("Return") et faire une boucle pour répéter l'opération wol jusqu'à ce qu'il n'y ai pas d'erreur.
    Il est aussi possible avec un script similaire de prendre le control distant avec affichage de l'écran (à condition que l'autre machine soit pourvue d'un serveur vnc ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    property Serveur : "Mon_Mac.local"
    property Utilisateur : "Kalouk"
    property mot_de_passe : "xxxxxx"
    set Mon_URL to "vnc://" & Utilisateur & ":" & mot_de_passe & "@" & Serveur
    open location Mon_URL
    Bref il y a toujours un moyen de confirmer que le wol a eu lieu correctement.
    Mais il n'y en a pas pour savoir pourquoi il n'a pas eu lieu (toujours éteint, machine déconnectée du réseau, paquet pas envoyé, etc...)

    Bon dimanche !

  7. #7
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2008
    Messages : 24
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par PBELL Voir le message
    Bonjour,
    Effectivement l'instruction wol développée en c est une instruction muette, c'est à dire qu'elle ne renvoie pas de message (ni OK, ni erreur). Elle se contente d'envoyer le paquet magique, un point c'est tout.

    Cependant j'ai eu la même préoccupation et j'ai contourné le problème avec d'autres instructions.
    La question est de savoir ce que tu va faire avec le Mac réveillé (ou qui devrait l'être), et de mettre un test pour savoir si il réponds correctement à ces instructions.

    Bref il y a toujours un moyen de confirmer que le wol a eu lieu correctement.
    Mais il n'y en a pas pour savoir pourquoi il n'a pas eu lieu (toujours éteint, machine déconnectée du réseau, paquet pas envoyé, etc...)

    Bon dimanche !
    Bonjour,
    Donc si je comprend bien on peut tester l’échec de réveil, mais pas la cause. Ce qui dans mon cas n'est pas très grave.
    Je vais tester une solution similaire à celle que tu propose, mais au lieu de monter un volume ne peut-on tester le réveil sur un simple Ping 192.168.XXX.XXX ?
    Si le ping abouti alors la machine est réveillée, sinon on répète la séquence ! dans le cas de réveil multiple la question est d'associer un Nom_Machine & Adresse_Mac à une Adresse_IP.
    Ben je crois que ça va m'occuper un chouia...
    Bon dimanche.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2008
    Messages : 24
    Points : 21
    Points
    21
    Par défaut Test d'un script codé au pied
    bonjour,
    j'ai tenté de reprendre ton script en utilisant le ping comme test, mais je pense qu'il faudrait un coup d'oeil avisé !
    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
    set Ma_List to {"TITI 00:23:54:40:EF:AB"}
    -- testé sur 1 machine sur ton réseau 
    set Mes_Adresses to choose from list Ma_List with title "Poste à réveiller" OK button name "Réveiller" cancel button name "Annuler" with multiple selections allowed and empty selection allowed
     
    if result = false then return
     
    repeat with Adr in Mes_Adresses
    	do shell script "/ScriptWol/wol/wol " & (Adr as string)
    end repeat
     
    try
    	delay 20 --temporise l'exécution de do shell script le temps du démarrage du pc
    	do shell script "ping -c 10 192.168.0.2" --teste si le pc est joignable limité à 10 le nombre d'envoi de paquets une valeur entre 3 et 5 devrait suffire.
    on error
    	display dialog "Erreur de connexion" & return & return & ¬
    		"Réessayez plus tard" & return & return & ¬
    		"ou relancer l'allumage à distance " buttons {"Fin"} default button 1
    	-- si erreur, fin du script
    end try
    --si la commande s'est exécutée correctement, mais fonctionne pas bien, s'affiche même quand une erreur est retournée
    display dialog "titi est réveillé" buttons {"Fin"} default button 1
    return
    end
    Le code fonctionne sur 1 machine j'aimerai pouvoir le faire fonctionner sur plusieurs, mais il comporte des erreurs que je ne sais pas résoudre(mettre une variable en paramètre où danser autour d'une gousse d'ail) :

    1) le message "titi est réveillé" s'affiche même si une erreur à été retournée, peut-être existe-t-il une autre manière de faire un test sur la sortie des 2 états, sucés vs échec,
    2) comment utiliser une liste comprenant l'ip+Nom_Machine+Adresse_Mac (cela pourrait servir en externe avec l'ip publique ça fonctionne en ligne de commande)
    3) modifier la gestion d'erreur pour que les messages "succès" ou "échec" affiche le ou les noms des machines avec le messages ad'hoc :
    titi Erreur de connexion
    toto s'est bien réveillé
    tata s'est bien réveillé
    etc.
    Merci de vos suggestions bienveillantes.

  9. #9
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonsoir Kalouk,

    Ton code présente quelques erreurs. Reprenons les dans l'ordre (sans gousse d'ail - encore que je n'ai pas essayé avec !):
    set Ma_List to {"TITI 00:23:54:40:EF:AB"}
    La variable attendue par la commande wol doit être une adresse MAC, soit "00:23:54:40:EF:AB", alors que tu lui envoies "TITI 00:23:54:40:EF:AB".
    Cela ne peut réveiller le "Titi" !

    Tu veux avoir une liste de machines. Il suffit de faire 2 listes, l'une des noms, l'autre des adresses, en prenant bien soin de garder le même ordre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Set Noms to {"Titi" , "Toto"}
    Set Adr to {"00:23:54:40:EF:AB" , "00:23:54:41:AF:FB" }
    Set List_Noms to choose from list Noms OK button name "Réveiller" cancel button name "Annuler" with multiple selections allowed and empty selection allowed
    -- si l'utilisateur click to "Annuler", fin de programe
    if result = false then return
    Repeat with N in Liste_Noms
    -- recherche du numéro de N dans la liste des noms
    Set Numero to 0
    repeat with I from 1 to count of Noms
    if (Item I of Noms) = N then set Numero to I
    end repeat
    -- il faut réveiller wol avec l'adresse  : item Numero of Adr
    do shell script "/ScriptWol/wol/wol " & (item Numero of Adr)
    end repeat
    Enfin, ton ping pose 3 problèmes :
    1) Certaines machines (en particulier sur PC Window) ne répondent pas, par défaut au ping. C'est vu comme une protection par défaut ! Dans ces cas, pas de réponse ne veut pas dire que la machine n'est pas réveillée ... gousse d'ail ou pas, c'est pareil.
    2) Ton bloc try, autour du ping donnera une erreur si le do shell script comporte une erreur, pas si le ping lui-même est exécuté sans problème (même si son résultat est un time out !). C'est ce qui se passe pour ton code. L'instruction ping ne pose pas de problème, donc pas d'erreur sur le bloc try. Simplement le résultat du ping est peut être un time out !
    3) Attention, la majeur partie des réseaux locaux utilisent un serveur DHCP (ta box Free, Orange, ...ou autres !) ce qui ne garantie pas que l'adresse IP de la machine distante sera toujours la même ! Après une panne de courant secteur affectant ta box et ton réseau, ton 192.168.0.2 peut devenir pour cette machine un 192.168.0.8 !

    Tu as cependant raison sur un point : un ping -c 3 suffit largement.
    Que faire pour le ping ?
    1) Ne pas utiliser l'IP directe, mais utiliser le nom (les box modernes ont un DNS intégré). Or, ce nom ne change pas !
    2) Utiliser alors une commande "host" pour faire le lien Nom DNS -> IP
    3) Lire le texte résultant du ping (variable Applescript = Result) et tester si il contient "request timeout". Dans ce cas, c'est que la machine ne réponds pas.
    Je n'ai pas de solution pour le ping d'une machine qui a pour instruction de ne pas répondre au ping !

    En pratique, comme indiqué précédemment, je préfère directement monter un volume distant, ce qui est finalement plus simple que de faire un ping ! tester si ce volume est dispo est bien plus simple. En général, on réveille une machine distante pour y accéder, pas pour la "pinguer" !


    Bon courage

  10. #10
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2008
    Messages : 24
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par PBELL Voir le message
    Bonsoir Kalouk,

    Ton code présente quelques erreurs. Reprenons les dans l'ordre (sans gousse d'ail - encore que je n'ai pas essayé avec !):

    La variable attendue par la commande wol doit être une adresse MAC, soit "00:23:54:40:EF:AB", alors que tu lui envoies "TITI 00:23:54:40:EF:AB".
    Cela ne peut réveiller le "Titi" !

    Tu veux avoir une liste de machines. Il suffit de faire 2 listes, l'une des noms, l'autre des adresses, en prenant bien soin de garder le même ordre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Set Noms to {"Titi" , "Toto"}
    Set Adr to {"00:23:54:40:EF:AB" , "00:23:54:41:AF:FB" }
    Set List_Noms to choose from list Noms OK button name "Réveiller" cancel button name "Annuler" with multiple selections allowed and empty selection allowed
    -- si l'utilisateur click to "Annuler", fin de programe
    if result = false then return
    Repeat with N in Liste_Noms
    -- recherche du numéro de N dans la liste des noms
    Set Numero to 0
    repeat with I from 1 to count of Noms
    if (Item I of Noms) = N then set Numero to I
    end repeat
    -- il faut réveiller wol avec l'adresse  : item Numero of Adr
    do shell script "/ScriptWol/wol/wol " & (item Numero of Adr)
    end repeat
    Enfin, ton ping pose 3 problèmes :
    1) Certaines machines (en particulier sur PC Window) ne répondent pas, par défaut au ping. C'est vu comme une protection par défaut ! Dans ces cas, pas de réponse ne veut pas dire que la machine n'est pas réveillée ... gousse d'ail ou pas, c'est pareil.
    2) Ton bloc try, autour du ping donnera une erreur si le do shell script comporte une erreur, pas si le ping lui-même est exécuté sans problème (même si son résultat est un time out !). C'est ce qui se passe pour ton code. L'instruction ping ne pose pas de problème, donc pas d'erreur sur le bloc try. Simplement le résultat du ping est peut être un time out !
    3) Attention, la majeur partie des réseaux locaux utilisent un serveur DHCP (ta box Free, Orange, ...ou autres !) ce qui ne garantie pas que l'adresse IP de la machine distante sera toujours la même ! Après une panne de courant secteur affectant ta box et ton réseau, ton 192.168.0.2 peut devenir pour cette machine un 192.168.0.8 !

    Tu as cependant raison sur un point : un ping -c 3 suffit largement.
    Que faire pour le ping ?
    1) Ne pas utiliser l'IP directe, mais utiliser le nom (les box modernes ont un DNS intégré). Or, ce nom ne change pas !
    2) Utiliser alors une commande "host" pour faire le lien Nom DNS -> IP
    3) Lire le texte résultant du ping (variable Applescript = Result) et tester si il contient "request timeout". Dans ce cas, c'est que la machine ne réponds pas.
    Je n'ai pas de solution pour le ping d'une machine qui a pour instruction de ne pas répondre au ping !

    En pratique, comme indiqué précédemment, je préfère directement monter un volume distant, ce qui est finalement plus simple que de faire un ping ! tester si ce volume est dispo est bien plus simple. En général, on réveille une machine distante pour y accéder, pas pour la "pinguer" !


    Bon courage
    Oupsss il y a tellement d'informations dans ta réponse que je sais pas par où commencer
    Bon sur la variable attendue par Wol : je ne sais pas ce que Wol lit et interprète pourtant ça fonctionne... Est-ce que comme il ne reconnait pas "TITI" il l'ignore et passe directement à la variable 00xxx:AB ?
    Ensuite le ping me semblait plus simple, car je veux réveiller un PC, qui pour démarrer et arriver sur un écran d'ouverture de session prend environ une bonne quarantaine de secondes (après réponse de la carte réseau). J'ai testé avec le montage d'un volume la machine était bien réveillée, mais j’obtenais un échec au montage du disque. J'ai donc supposé que le temps de latence entre le réveil lui-même et la disponibilité du disque à monter était trop long.

    Donc j'ai tenté l'approche du ping qui devait uniquement servir pour tester si titi était bien réveillé, même résultat, erreur affichée du style (échec retentez plus tard) quelque chose comme ça. J'ai débranché le câble réseau et bien sur j'ai une bonne vieille VRAIE erreur.

    J'ai fouillé pour voir s'il existait un commande pour temporiser l'exécution de l'instruction "do shell script" je suis tombé sur "delay". Petite précision mon réseau est bien en DHCP ou plutôt un pseudo DHCP puisque j'ai assigné des ip pour mes différentes machines (je conserve le DHCP pour les amis qui viennent) donc toutes mes bécanes sont pingables.

    Revenons à nos moutons ! avec l'instruction "delay 40" tout était nickel l'historique d'applescript montrait que le ping se déroulait correctement (j'ai eu des timeout j'usqu'à delay 35). Ceci dits je peux maintenant tester en montant un disque, car tu as raison ping n'est qu'un test rien d'autre. Monter un volume est très certainement plus utile.
    Je vais faire ce que tu préconise juste pour voir s'il y à une différence et apprendre...

    Par contre je ne sais pas où placer le script plus haut, mais je vais tâtonner, je sais c'est un peu bourrin, mais l'apprentissage par essais/erreurs fonctionne assez bien chez moi
    Ceci dis tu devrai tester le script "nom_machine Adresse_Mac" et voir si ça fonctionne sur des Mac, car ta remarque sur la variable attendue par Wol m'interpelle vu que pour le réveil de "titi" ça n'a pas engendré d'erreur. J'aimerai bien avoir ton avis sur ce point.
    Merci pour ta patience et la qualité de tes réponses. Tu devrais former des codeurs ! si ce n'est déjà le cas.

  11. #11
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonjour,
    j'ai testé sur le Terminal, la commande wol avec un nom devant l'adresse MAC.
    Je pense que tu as finalement raison car la réponse est :
    /wol: invalid hardware address
    /wol: packet sent to EA60:FFFFFFFF-00:25:00:FF:FF:FF
    La première ligne indique une erreur, mais la seconde confirme l'envoi du paquet magique. Le résultat est donc le même avec ou sans un nom devant.
    Je me suis penché sur le code c, et j'avoue ne pas avoir compris comment le code fait la différence si le nom contient aussi des caractères hexa (0-9, A-F)....
    Bon, je ne suis pas spécialiste c, mais le résultat est là !


    "Delay" est effectivement la fonction d'attente. Tu peux aussi faire une boucle en attendant que la machine réponde favorablement, ce qui te permettra de t'adapter à tous les cas (peut être un jour mettra-t-elle plus de 40 secondes ?). Mets toutefois une limite au nombre de boucle pour éviter un piège infini.

    L'expérience est le nom que chacun donne à ses erreurs (Oscar Wilde). Donc tu as raison, il faut faire des erreurs et les reconnaitre pour progresser.

    Cordialement

  12. #12
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2008
    Messages : 24
    Points : 21
    Points
    21
    Par défaut WOL le Retour
    Bonjour,
    j'ai été tenu éloigné depuis plus d'un lois, aussi je présent mes excuses aux contributeurs pour ce long silence.
    Je vous livre la dernière mouture de mon script qui intègre une gestion d'erreur, mais cette dernière ne fonctionne que sur une machine.
    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
     
     
    activate
    set Ma_List to {"TITAN 00:46:A8:80:DF:57"}
    -- testé sur 1 machine sur Mon réseau 
     
    set Mes_Adresses to choose from list Ma_List with title "Poste à réveiller" OK button name "Réveiller" cancel button name "Annuler" with multiple selections allowed and empty selection allowed
     
    if result = false then return
    (* Initialisation de la boucle de commandes "Wol" sur la liste de machines *)
    repeat with Adr in Mes_Adresses
    	do shell script "/ScriptWol/wol/wol " & (Adr as string) -- la commande est envoyée via le shell
    end repeat
     
    set ok to true (* Morceau d'un script "ping" récupéré à l'adresse : "http://forum.macbidouille.com/lofiversion/index.php/t68978.html", crée par __Toto__maison *)
    try
    	delay 40 -- Temporisation de l'éxecution du ping pour laisser
    	do shell script "ping -c 5 192.168.0.2"
    on error erreur
    	set ok to false(* encore le bout de code de __Toto__maison cité plus haut*)
    end try
     
    if ok is true then
    	display dialog "Titan est réveillé" buttons {"OK"} default button 1 
    else
    	display dialog "Titan est injoignable:" & (erreur as string) buttons {"OK"} default button 1 
    end if
    (* ce sript est initialement conçu pour pouvoir "réveiller" plusieurs machines, mais je ne suis pas parvenu à gérer le retour d'erreur sur plus d'une machine. L'erreur retournée concerne juste celle pour laquelle l'état "ok" est true est ignore celles pour lesqu'elles cet état est false *)
    Si vous avez des suggestions pour gérer le retour de résultat en fonction des machines réveillées ou non.
    Merci

  13. #13
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonjour,

    Tout d'abord, comme indiqué dans ma réponse précédente, le ping n'est pas le bon moyen de vérifier si une machine est réveillée.
    Certe, si le ping est positif, la machine est bien réveillée, mais si le ping ne réponds pas, cela ne signifie rien.
    En effet, par défaut, nombre de PC / Windows sont paramètrés pour ne pas répondre à une requête ping !! Pourtant, ils peuvent bien être réveillés.
    C'est Ok si tu es certain du paramètrage de réponse aux requêtes ping de chaque machine.

    Enfin, cela t'oblige à avoir des IP fixes...c'est peut être déjà le cas ?
    Ces mises en garde étant faites, ton programme doit être modifié pour inclure le bloc de test des ping dans la boucle des adresses. (il est actuellement limité à la seule adresse 192.168.0.2).
    Je propose aussi de réduire à 3 tests les ping au lieu de 5 (5 c'est vraiment long pour un réseau local qui fonctionne ! )

    Outre cette insertion dans une boucle,...il faut bien connaître les adresses IP de chaque machine.
    Supposons d'abord que ces IP soient fixes et que tu les connaisses, et qu'elles soient dans une liste que tu as défini. Le code ci-dessous fonctionne : (adresses prises au hasard)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    set Mes_IP to {"192.168.1.10", "192.168.1.12", "192.168.1.15", "192.168.1.16"}repeat with Mon_IP in Mes_IP
        try
            set Ping_OK to true
            do shell script "ping -c 3 " & Mon_IP
        on error
            set Ping_OK to false
        end try
        if Ping_OK then
            display dialog "La machine dont l'IP est " & Mon_IP & " est réveillée."
        else
            display dialog "La machine dont l'IP est " & Mon_IP & " ne répond pas."
        end if
    end repeat

    La question est donc : connais tu bien les adresse IP (donc fixes !) de chaque machine pour construire une liste Mes_IP ?

    Si oui, alors tu as juste à mettre ces adresses, si possible dans le même ordre que les machines de ta liste Ma_List.
    Encore mieux, tu transformes ta liste en une liste d'enregistrements avec 3 propriétés par machine : son IP fixe, son nom et son adresse MAC.
    Voici un exemple d'enregistrement avec 3 machines et comment lire chaque propriété :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    set Ma_Liste to {}set Ma_Liste to Ma_Liste & {{M_Nom:"Titan", M_IP:"192.168.1.10", M_MAC:"00:FF:CC:D0:23"}}
    set Ma_Liste to Ma_Liste & {{M_Nom:"Tutu", M_IP:"192.168.1.15", M_MAC:"00:FF:CC:DF:20"}}
    set Ma_Liste to Ma_Liste & {{M_Nom:"Toto", M_IP:"192.168.1.16", M_MAC:"00:FF:CC:DA:A3"}}
    
    
    repeat with La_Machine in Ma_Liste
        set Adresse_Mac to M_MAC of La_Machine
        set Adresse_IP to M_IP of La_Machine
        set Nom to M_Nom of La_Machine
        display dialog "nom=" & Nom & return & "IP=" & Adresse_IP & return & "Mac=" & Adresse_Mac
    end repeat
    La liste Ma_Liste contient donc 3 items, chacun étant un enregistrement de 3 propriétés (d'où la présence de {} qui encadrent les enregistrements, elles-mêmes encadrées pour une liste !)


    Cependant, il est possible que tu ne connaisses pas les adresses IP... Là il va falloir passer par d'autres instructions !
    Avant de se précipiter en Applescript, il faudra alors te familiariser avec les instructions réseau sur le Terminal (qui seront appelées via do shell script).
    En particulier, l'instruction arp -a donne la liste des machines connectées à ta machine avec leur nom (si tu as un serveur DNS type box internet), leur IP (variable !) et leur adresse MAC.
    Cette instruction ne liste une autre machine que si ton poste a déjà établi une communication depuis moins d'un certain temps avec cette machine (je ne rentre pas dans les détails trop techniques).

    Or, justement un PING est un accès !
    Tape man arp sur le Terminal et tu verras le mode d'emploi !

    A titre d'exemple voici une partie de ce que cela donne chez moi (j'ai changé les adresses MAC et IP !)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    imac27:~ imac27$ arp -a
    livebox.home (192.168.1.1) at 3c:81:d8:FF:FF:FF on en0 ifscope [ethernet]
    mini.home (192.168.1.10) at 0:16:cb:FF:FF:FF on en0 ifscope [ethernet]
    netgear.home (192.168.1.11) at 0:f:b5:FF:FF:FF on en0 ifscope [ethernet]
    audio-salon-cd.home (192.168.1.12) at 68:a8:6d:FF:FF:FF on en0 ifscope [ethernet]
    Cordialement

  14. #14
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2008
    Messages : 24
    Points : 21
    Points
    21
    Par défaut Test Wol avec gestion d'erreur
    Bonjour,
    j'ai testé ton code sur 3 machines, mais si les associations (nom, ip,adresses Mac) fonctionnent très sur les dialogues pour sélectionner les machines.
    La gestion d'erreurs (réussite ou échec) est erronée !!!
    voici le résultat de l’exécution :
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    tell application "AppleScript Editor"
    	display dialog "nom=Titi\rIP=192.168.0.10\rMac=00:46:BB:80:DF:57"
    		--> {button returned:"OK"}
    end tell
    tell current application
    	do shell script "/ScriptWol/wol/wol 00:46:BB:80:DF:57"
    		--> ""
    end tell
    tell application "AppleScript Editor"
    	display dialog "nom=Tutu\rIP=192.168.0.15\rMac=00:FF:CC:DF:20"
    		--> {button returned:"OK"}
    end tell
    tell current application
    	do shell script "/ScriptWol/wol/wol 00:FF:CC:DF:20"
    		--> ""
    end tell
    tell application "AppleScript Editor"
    	display dialog "nom=Toto\rIP=192.168.0.16\rMac=00:FF:CC:DA:A3"
    		--> {button returned:"OK"}
    end tell
    tell current application
    	do shell script "/ScriptWol/wol/wol 00:FF:CC:DA:A3"
    		--> ""
    	do shell script "ping -c 3 192.168.0.2"
    		--> "PING 192.168.0.2 (192.168.0.2): 56 data bytes\r64 bytes from 192.168.0.2: icmp_seq=0 ttl=128 time=11.418 ms\r64 bytes from 192.168.0.2: icmp_seq=1 ttl=128 time=3.757 ms\r64 bytes from 192.168.0.2: icmp_seq=2 ttl=128 time=3.604 ms\r\r--- 192.168.0.2 ping statistics ---\r3 packets transmitted, 3 packets received, 0.0% packet loss\rround-trip min/avg/max/stddev = 3.604/6.260/11.418/3.648 ms"
    end tell
    tell application "AppleScript Editor"
    	display dialog "La machine dont l'IP est 192.168.0.10 Toto  est réveillée."
    		--> {button returned:"OK"}
    end tell
    tell current application
    	do shell script "ping -c 3 192.168.0.15"
    		--> error "PING 192.168.0.15 (192.168.0.15): 56 data bytes\rRequest timeout for icmp_seq 0\rRequest timeout for icmp_seq 1\r\r--- 192.168.0.15 ping statistics ---\r3 packets transmitted, 0 packets received, 100.0% packet loss" number 2
    end tell
    tell application "AppleScript Editor"
    	display dialog "La machine dont l'IP est 192.168.0.15Toto  ne répond pas."
    		--> {button returned:"OK"}
    end tell
    tell current application
    	do shell script "ping -c 3 192.168.0.16"
    		--> error "PING 192.168.0.16 (192.168.0.16): 56 data bytes\rRequest timeout for icmp_seq 0\rRequest timeout for icmp_seq 1\r\r--- 192.168.0.16 ping statistics ---\r3 packets transmitted, 0 packets received, 100.0% packet loss" number 2
    end tell
    tell application "AppleScript Editor"
    	display dialog "La machine dont l'IP est 192.168.0.16Toto  ne répond pas."
    		--> {button returned:"OK"}
    end tell
    Résultat*:
    {button returned:"OK"}
    Toutes les réponses "négatives" ne portent que sur "TOTO" pourtant les boucles s'exécutent bien !!!
    je vais tenter de résoudre cette bizarrerie.
    Cordialement

  15. #15
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonsoir,
    Peux tu montrer ton code pour que je comprenne ce qui ne va pas.
    Merci

  16. #16
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2008
    Messages : 24
    Points : 21
    Points
    21
    Par défaut Re
    Citation Envoyé par PBELL Voir le message
    Bonsoir,
    Peux tu montrer ton code pour que je comprenne ce qui ne va pas.
    Merci
    Bonsoir,
    voici le code, j'ai joué avec la liste "noms, ip, mac" afin de voir les différents comportements. Ceci dits que ce soit cette forme ou celle que tu as proposé le résultat est strictement le même.
    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
     
    set Ma_Liste to {}
    set Ma_Liste to Ma_Liste & {{M_Nom:" Titan ", M_IP:"192.168.0.2 ", M_MAC:"00:46:A8:80:DF:57"}, {M_Nom:" Tutu ", M_IP:"192.168.0.15 ", M_MAC:"00:FF:CC:DF:20:AA"}, {M_Nom:" Toto ", M_IP:"192.168.0.16 ", M_MAC:"00:FF:CC:DA:A3:AA"}}
     
    repeat with La_Machine in Ma_Liste
    	set Adresse_Mac to M_MAC of La_Machine
    	set Adresse_IP to M_IP of La_Machine
    	set Nom to M_Nom of La_Machine
    	display dialog "nom=" & Nom & return & "IP=" & Adresse_IP & return & "Mac=" & Adresse_Mac
    	do shell script "/ScriptWol/wol/wol " & (Adresse_Mac as string)
    end repeat
     
    set Mes_IP to {"192.168.0.2", "192.168.0.15", "192.168.0.16"}
    repeat with Mon_IP in Mes_IP
    	try
    		set Ping_OK to true
    		--delay 40
    		do shell script "ping -c 3 " & Mon_IP
    	on error
    		set Ping_OK to false
    	end try
    	if Ping_OK is true then
    		display dialog "La machine dont l'IP est  " & Mon_IP & Nom & "  est réveillée."
    	else
    		display dialog "La machine dont l'IP est  " & Mon_IP & Nom & "  ne répond pas."
    	end if
    end repeat
    J'ai placé la commande wol dans la boucle "repeat with" cela me semblait logique...
    Merci

  17. #17
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Bonjour Kalouk,
    Ton script comporte effectivement une erreur d'analyse. il se comporte de 2 parties :
    1) une boucle sur les items de la liste Ma_Liste. Dans cette boucle, les variables Adresse_Mac, adresse_IP et Nom sont définies comme étant égales à l'item de Ma_liste en cours de traitement. Cette boucle lance le WOL.

    2) une boucle de Ping sur les adresses IP de la liste Mes_IP, qui effectue, pour chaque Mon_IP, un ping avec détection de la réponse

    Le problème est que ton dialogue affichant le résultat de la seconde boucle utilise bien la variable Mon_IP , mais avec la variable Nom. Cette dernière prend la dernière valeur affectée...dans la boucle 1, c'est à dire toujours "Toto". Pour être correct, il faut affecter Nom dans cette même boucle.

    Lors de mes posts précédents, je t'avais donné les morceaux de code, mais il fallait bien les assembler. Voici ci-dessous l'assemblage correct.
    Tu remarques que tu n'as plus besoin de dupliquer la liste des adresses IP.
    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
    set Ma_Liste to {}set Ma_Liste to Ma_Liste & {{M_Nom:" Titan ", M_IP:"192.168.0.2 ", M_MAC:"00:46:A8:80:DF:57"}, {M_Nom:" Tutu ", M_IP:"192.168.0.15 ", M_MAC:"00:FF:CC:DF:20:AA"}, {M_Nom:" Toto ", M_IP:"192.168.0.16 ", M_MAC:"00:FF:CC:DA:A3:AA"}}
     
    repeat with La_Machine in Ma_Liste
        set Adresse_Mac to M_MAC of La_Machine
        set Adresse_IP to M_IP of La_Machine
        set Nom to M_Nom of La_Machine
        display dialog "nom=" & Nom & return & "IP=" & Adresse_IP & return & "Mac=" & Adresse_Mac
        do shell script "/ScriptWol/wol/wol " & (Adresse_Mac as string)
    end repeat
     
     
    repeat with La_Machine in Ma_Liste
        set Adresse_IP to M_IP of La_Machine
        set Nom to M_Nom of La_Machine    try
            set Ping_OK to true        --delay 40        do shell script "ping -c 3 " & Adresse_IP    on error        set Ping_OK to false    end try    if Ping_OK is true then        display dialog "La machine dont l'IP est  " & Adresse_IP & " / " & Nom & "  est réveillée."    else        display dialog "La machine dont l'IP est  " & Adresse_IP & " / " & Nom & "  ne répond pas."
        end if end repeat
    Cordialement

  18. #18
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2008
    Messages : 24
    Points : 21
    Points
    21
    Par défaut
    Que de subtilités, je vais regarder ça de prés pour comprendre...
    Existe-t-il une instruction applescript pour voir le déroulement du script (pas à pas) ?
    l'historique est assez peu explicite pour moi.
    Bonne journée

  19. #19
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Janvier 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2008
    Messages : 24
    Points : 21
    Points
    21
    Par défaut
    Ca y est je crois avoir compris :
    1) la première boucle à terminé son travail sur le dernier item "toto"
    2) la seconde boucle n'avait pas définie "nom" est donc récupérait la dernière valeur lue par la première donc "toto".

    La répétition de la boucle pour la gestion des réponses reprend la liste séquentiellement est synchronise bien :
    Adresse_IP et Nom avec La_Machine.

    Un grand merci

  20. #20
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 602
    Points : 1 239
    Points
    1 239
    Par défaut
    Tu as parfaitement compris !

    Malheureusement, Applescript ne brille pas par ses fonctions de debugging !
    Pas de point d'arrêts, pas de surveillance de variables, ...tout juste une petite trace limité essentiellement aux résultats des display dialog, gets, et quelques autres...
    Donc le meilleur moyen est encore de faire un log avec écriture d'un fichier texte ou une succession de "display dialog" qui affichent le suivi de tes variables.

    A toutes choses, il y a un côté positif : cela force le développeur Applescript a être très structuré et à bien construire sa logique, avant de taper le code !

    Bon courage, tu est sur la bonne voix

Discussions similaires

  1. WOL avec un BIOS PHOENIX
    Par Neckara dans le forum Matériel
    Réponses: 11
    Dernier message: 17/05/2012, 21h18
  2. Réponses: 0
    Dernier message: 31/12/2010, 06h14
  3. Piloter une caméra avec Applescript, c'est possible ?
    Par septembr1 dans le forum AppleScript
    Réponses: 2
    Dernier message: 03/11/2008, 23h35
  4. [DEV] Récupérer du texte avec AppleScript
    Par Queb dans le forum AppleScript
    Réponses: 3
    Dernier message: 30/08/2007, 11h16
  5. Le magazine de developpez.com, version avec ou sans fond de page ?
    Par cchatelain dans le forum Evolutions du club
    Réponses: 17
    Dernier message: 18/10/2006, 22h12

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