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 :

Exécution d'un script à la fermeture de Windows 7


Sujet :

Windows

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2011
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 47
    Points : 23
    Points
    23
    Par défaut Exécution d'un script à la fermeture de Windows 7
    Bonjour,

    Lors de la fermeture de Windows 7, j'exécute un script afin d'envoyer une commande de shutdown à un NAS.

    J'utilise la commande suivante : plink -ssh -pw passwd root@nas.local shutdown -p now

    Lorsque j'exécute cette commande en dehors du processus de fermeture, j'obtiens bien le résultat espéré : le NAS s'éteint.

    Lorsque la même commande est exécutée suite à l'opération de fermeture de Windows, Windows reste bloqué sur son écran de fermeture comme si la commande ne se terminait pas et bloquait Windows.

    Le problème est que l'écran de fermeture m'empêche de voir le résultat de la commande et je ne sais donc pas comment débugger le script.

    Quelqu'un a-t-il une idée de pourquoi cette commande s'exécute correctement en dehors de la fermeture et ne s'exécute pas correctement durant le processus de fermeture?

    Si non, existe-t-il un moyen de désactiver l'écran de fermeture pour voir apparaître les opérations effectuées pendant la fermeture?

    Ou alors, existe-t-il un moyen pour logger le résultat de la commande?

    Merci.

  2. #2
    Membre à l'essai
    Inscrit en
    Janvier 2011
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Voilà, j'ai progressé un peu, mais je n'arrive pas à résoudre le problème.

    J'ai redirigé la sortie du programme dans un fichier .log.
    Lorsque le script est effectué à la fermeture de Windows, plink sort le message suivant :

    The server's host key is not cached in the registry. You
    have no guarantee that the server is the computer you
    think it is.
    Normalement, pour ne plus avoir ce messaged'erreur, il faut exécuter une première fois la connexion ssh avec putty ou plink. Le logiciel demande alors si on accepte la clé et si oui, il l'enregistre dans le registre de Windows, ce qui lui permet de reconnaître le serveur lors des prochaines connexions.

    Cette étape a été faite et lorsque j'exécute le script en direct ou lorsque je tape la commande dans un command shell, cela fonctionne.
    par contre, le même script exécuté lors de la fermeture de Windows donne le message ci-dessus. Comme si le logiciel ne pouvait plus retrouver l'information dans le registre.

    Comment pourrais-je résoudre le problème?

    Merci.

  3. #3
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 206
    Points : 28 129
    Points
    28 129
    Par défaut
    TU as ce problème probablement parce qu'au moment ou tu exécute cette commande, la base de registre est déjà en partie déchargée, certaines clés ne sont déjà plus accessible.

    Je ne sais pas comment tu lance ton script, mais avec l'éditeur de stratégie de windows tu mettre des scripts au démarrage ou à l'arrêt de windows.

    Lancer GPEdit.msc, dérouler Stratégie Ordinateur local/Configuration ordinateur/Paramètres Windows/Scripts (démarrage/arrêt)
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  4. #4
    Membre à l'essai
    Inscrit en
    Janvier 2011
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Oui, c'est ce que j'ai fait.
    J'ai placé le script dans C:\Windows\System32\GroupPolicy\Machine\Scripts\Shutdown et avec GPEdit.msc, j'ai demandé à charger le script (Configuration ordinateur - Paramètres Windows - Script (démarrage/arrêt) - Arrêt du système)

    Mais je pense que je commence à comprendre ce qui se passe.
    Le logiciel plink (basé sur PuTTY) stocke la "host key" nécessaire à la connexion dans la section HKEY_CURRENT_USER.
    Je ne suis pas du tout expert, mais j'en viens à penser que lorsque le script est lancé, la session utilisateur est déjà fermée -> se pourrait-il que le CURRENT_USER n'est plus définit à ce moment là et que le logiciel ne trouve plus la clé?
    Que vaut le CURRENT_USER lorsque la session est fermée?

    Si c'est le cas, existe-t-il une méthode pour corriger le problème?

  5. #5
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 206
    Points : 28 129
    Points
    28 129
    Par défaut
    Oui c'est probablement quelque chose comme ça.

    Il faudra que la clé soit stockée plutôt dans la branche LocalMachine.

    Ou alors que tu lance le script, non pas à la fermeture de Windows, mais à la fermeture de session. L'inconvénient, c'est si tu ferme ta session pour en ouvrir une autre sous u autre utilisateur mais sans relancer Windows, ton script sera lancé
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  6. #6
    Membre à l'essai
    Inscrit en
    Janvier 2011
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Pour la session, je suis d'accord.
    Je ne peux pas lancer le script lors de la fermeture de la session, cela ne donnerais pas le résultat que je recherche.

    J'ai déjà essayé de replacer la clé dans la section HKEY_LOCAL_MACHINE avec la même arborescence que celle placée dans HKEY_CURRENT_USER, mais ca ne fonctionne pas.
    Je présume que le programme plink cherche la clé dans une section bien déterminée.

    Ce qu'il faudrait, c'est que le script soit exécuté avant la fermeture de la session. Mais est-ce réalisable, existe-t-il une option qui permette de faire cela?

    Je pense de plus en plus que je ne vais pas m'en sortir avec le programme plink.

  7. #7
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 206
    Points : 28 129
    Points
    28 129
    Par défaut
    As-tu besoin d'envoyer ta commande en SSH (et donc d'utiliser plink) ?

    Si tu mets la commande shutdown directement dans ton script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Shutdown /s /m \\NomDeTonNas
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  8. #8
    Membre à l'essai
    Inscrit en
    Janvier 2011
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    J'ai essayé la commande que tu proposes, mais je reçois le message suivant : NAS : Accès refusé.
    Le NAS est un PC sur lequel tourne freenas.

    Merci.

  9. #9
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 206
    Points : 28 129
    Points
    28 129
    Par défaut
    Ok, je pensais que le NAS était aussi sous Windows. La commande Shutdown de Windows ne marchera pas s'il n'est pas sous windows.

    Sur le net, j'ai trouvé un raccourcis pour lancer l'arret. C'est en réalité une adresse web :
    http://adminName:adminPassword@192.168.1.250/exec_raw.php?cmd=shutdown%20-p%20now
    Il y a peut de chance que ça marche dans un script d'arret mais pourquoi pas.

    L'idéal serait que pour les informations que plink va chercher dans la base de registre, il y est une option pour lui dire d'aller les chercher ailleurs, dans un fichier par exemple. Ou les passer directement en lignes de commande.

    Je ne sais pas ce qui est possible avec ce logiciel.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  10. #10
    Membre à l'essai
    Inscrit en
    Janvier 2011
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Je ne comprend pas comment utiliser le raccourci que tu as trouvé.
    Si je le tape dans le navigateur, j'obtiens une erreur de chargement de la page.

    Pour plink, j'ai rapatrié le code source.
    J'y ai retrouvé codé en dur les valeur HKEY_CURRENT_USER et d'autres chaînes de caractères qui indiquent ou la clé est stockée dans la base de registre.

    J'ai remplacé ces chaînes de caractères par HKEY_LOCAL_MACHINE et recompilé le code à l'aide ce Visual C++ 2010 Express.

    Le nouveau code produit est bien différent de l'ancien car il m'a de nouveau reproposé de sauvegarder la clé, mais il ne la stocke pas à l'endroit prévu (pas dans la section HKEY_LOCAL_MACHINE).

    Un programme utilisateur peut-il aller stocker des clés dans la section HKEY_LOCAL_MACHINE?

  11. #11
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 206
    Points : 28 129
    Points
    28 129
    Par défaut
    Pour pouvoir écrire dans LocalMachine sous W7, il te faut peut-être une élévation de privilèges.

    Au moment ou tu veux enregistrer ta clé, tu fais un click droit sur l'executable et tu choisis "Executer en tant qu'administrateur"
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  12. #12
    Membre à l'essai
    Inscrit en
    Janvier 2011
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    En fait, il n'est pas nécessaire d'élever les privilèges pour écrire dans cette section du registre. L'écriture marche parfaitement avec les droits normaux. C'est juste que comme c'est un programme compilé en 32 bits et que je tourne sur un système 64 bits, la clé est automatiquement transférée dans la section HKEY_LOCAL_MACHINE/SOFWARE/Wow6432Node ce qui d'après ce que j'ai pu lire ici et là, est un comportement parfaitement normal.
    Par contre, cela ne résout pas le problème d'accès à la clé lors de la fermeture. On dirait que lors de la fermeture, le logiciel n'a plus accès au registre Windows.

    Quoi qu'il en soit, j'ai abordé le problème autrement. Plutôt que d'essayer de bidouiller avec les clés du registre, j'ai désactivé la vérification de la présence de la clé. Le nouveau programme ne cherche donc plus à s'assurer qu'il communique en ssh avec un serveur déjà enregistré et maintenant, cela fonctionne parfaitement lors de la fermeture de Windows: La communication ssh s'établit inconditionnellement.
    Pour mon application, je n'ai absolument pas besoin de cette sécurité qui consiste à valider le serveur avec lequel je communique. De toute façon, la connexion est sécurisée par mot de passe.

    Merci pour ton aide.

Discussions similaires

  1. Exécuter commande à la fermeture de Windows
    Par rabobsky dans le forum Autres Logiciels
    Réponses: 12
    Dernier message: 19/02/2014, 11h06
  2. Exécution d'un script VB sur un serveur Windows
    Par mahmoud_arwa dans le forum Windows Serveur
    Réponses: 3
    Dernier message: 29/01/2013, 21h51
  3. [EasyPHP] Exécuter script genre cron sous windows en local
    Par nathalie16 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 01/11/2010, 13h18
  4. Exécution d'un script JS sous windows
    Par harlock59 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/06/2009, 18h59
  5. [Configuration] Exécution d'un script chaque jour sur windows
    Par tiger360 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 20/02/2008, 18h32

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