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

VBScript Discussion :

Erreur d'exécution - script VBS


Sujet :

VBScript

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 13
    Points : 4
    Points
    4
    Par défaut Erreur d'exécution - script VBS
    Bonjour à tous,


    Je rencontre un soucis d'exécution dans un petit script VB.

    Le retour que j'ai est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Cet objet ne gère pas cette propriété ou cette méthode : 'objVol.DriveLetter'
    Code : 800A01B6

    Ceci concernant ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       for each objVol in colVol
          objVol.DriveLetter = strNewDrive
          objVol.Put_

    Ps : niveau faible en prog, donc parlez moi en "human readable" svp


    Si quelqu'un a une idée, je suis preneur.


    S'il vous faut plus d'infos, je reste à l'écoute.



    Merci d'avance.






    K.

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    d'où viens colVol ..?

  3. #3
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    J'espère que la réponse est dans le code (parce que moi j'en sais rien).
    Code intégral :
    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
     
    ' Script VB qui tente de changer une lettre de lecteur USB (F: ---> L:)
    strComputer = "."
    strOldDrive = "F:" 
    strNewDrive = "L:" 
    ' ------ END CONFIGURATION ---------
     
    set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
     
    'set colVol = objWMI.ExecQuery("select * from Win32_Volume where Name = '" & _
    '                              strOldDrive & "\\'")
    '
    set colVol = objWMI.ExecQuery("Select DeviceID from Win32_DiskDrive WHERE InterfaceType='USB'")
     
    if colVol.Count <> 1 then
       WScript.Echo "Erreur : Le volume recherché n'a pas été trouvé."
    else
       for each objVol in colVol
          objVol.DriveLetter = strNewDrive
          objVol.Put_
          WScript.Echo "Mise à jour des lettres de lecteur effectuée avec succès."
       next
    end if

    Voici la source :
    Source



    "Petit" oubli : L'environnement est full Windows (2000 / XP / 2003)




    K.

  4. #4
    Membre averti
    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Points : 341
    Points
    341
    Par défaut
    Salut,

    moi c'est

    qui me choque, ca ne me dit rien comme syntaxe VBS.

    A++

  5. #5
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Salut,



    Moi rien ne me choque puisque que je ne connais pas ce langage - je n'ai que quelques bases en dev, mais pas plus que ça quoi.

    Ceci dit, le "Windows Server Cookbook" dont est issue la majeure partie de ce code semble être une source sûre.


    S'ils ont mis ça, c'est qu'il y a une raison je pense. Après, il faut peut-être que je l'adapte à mon cas.

    A tâton, j'ai ôté le , mais je n'ai pas pu voir si ça changeait quelque chose étant donné que le code bloque à la ligne précédente.


    Toujours est-il que lorsque ce script sera fonctionnel, ça sera très pratique !


    a+

  6. #6
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 299
    Points : 3 554
    Points
    3 554
    Par défaut
    salut,
    quelque chose comme ça ?
    http://www.visualbasicscript.com/m_38810/tm.htm

  7. #7
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    salut,


    Je ne suis pas contre quelque chose comme ça, mais je ne vois pas mieux quel objet choisir à la place de "colvol", si tant est qu'il soit la cause du problème.

    Je suis donc bloqué

    dans tous les cas, merci à ceux qui tentent (ou ont tenté) de m'aider.


    A+

  8. #8
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Alors :
    objVol.Put_

    J'ai déjà vu une syntaxe dans le genre sur un code fournis par MSDN.
    Cela m'a surpris à l'époque mais cela marche (pas le même objet).

    Perso j'aurais plus utilisé cette ligne ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set colVol = objWMI.ExecQuery("Select * from Win32_DiskDrive WHERE InterfaceType='USB'")
    Comme le dit l'erreur DriveLetter n'existe pas pour la classe Win32_DiskDrive.
    En fait diskdrive gère les disque physique et s'en fou des lettres de ces lecteurs, il faut utiliser win32_logicaldisk

    Ensuite la propriété DeviceID renseigne sur la lettre, et tu peux la modifier.

    Cela un truc du genre :
    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
    ' Script VB qui tente de changer une lettre de lecteur USB (F: ---> L:)
    strComputer = "."
    strOldDrive = "F:" 
    strNewDrive = "L:" 
    ' ------ END CONFIGURATION ---------
     
    set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
     
    'set colVol = objWMI.ExecQuery("select * from Win32_Volume where Name = '" & _
    '                              strOldDrive & "\\'")
    '
    set colVol = objWMIService.ExecQuery("SELECT * FROM Win32_LogicalDisk WHERE DriveType = 2",,48) 
     
    if colVol.Count <> 1 then
       WScript.Echo "Erreur : Le volume recherché n'a pas été trouvé."
    else
       for each objVol in colVol
          objItem.DeviceID = strNewDrive
          WScript.Echo "Mise à jour des lettres de lecteur effectuée avec succès."
       next
    end if

  9. #9
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Salut,


    Lorsque j'utilise ton code, il me dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Objet requis: 'ObjWMIService'
    J'imagine qu'il me manque un package ou quelque chose du genre sur ma machine.

    Cela voudrait dire que pour intervenir sur un poste client je devrais systématiquement installé ce qu'il me manque pour pouvoir exécuter ce script ??



    Y a pas un moyen plus simple pour changer une lettre de lecteur ?

  10. #10
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Non non tu parts sur le mauvais résonnement.
    J'ai juste fais un erreur de copier coller.

    Même si tu es débutants lit le script, et pas comme si c'était du chinois, mais comme si c'était un texte compréhensible.

    l'erreur est là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set objWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
     
    set colVol = objWMIService.ExecQuery("SELECT * FROM Win32_LogicalDisk WHERE DriveType = 2",,48)
    En gros qu'est ce que cela veut dire :
    Tu récupère un objet grâce à GetObject et tu le stockes dansune variable (laisse tomber les parramètres "winmgmts:\\" & strComputer & "\root\cimv2" trop compliqué pour l'instant).
    Ensuite tu demandes à l'aide de cette variable que l'objet exécute la méthode ExecQuery qui prend une requête en paramètre.
    En plus de cela tu stockes le résultat de la requête dans une collection (liste si cela te parles plus).
    Donc la l'erreur de copier coller que j'ai fait et que j'ai utiliser objWMIService qui n'existe pas alors que j'ai stocké l'objet dans objWMI

    Donc voilà change objWMIService par objWMI.

  11. #11
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Re,


    Ton explication est parfaite ! Merci

    En fait, je me suis lancé là dedans sans trop m'être documenté.
    Je viens de terminer de lire la doc trouvée dans les cours (INTRODUCTION AU LANGAGE VBSCRIPT de Serge Tahé).

    C'est vraiment bien fait.

    C'est vrai que j'ai découvert le dev par "obligation" alors j'ai pas été trop réceptif ; mais quand je vois le potentiel du VBS, ça me donne envie de m'y mettre.


    Bref, je vais vérifier le code et le tester s'il n'y a plus d'erreur.


    Je repasse dans quelques minutes pour donner le résultat.


    Merci de ton aide dans tous les cas !


    K.

  12. #12
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Bon, finalement ça n'a pas été si simple.


    Déjà, le premier test plante. J'ai une erreur d'éxécution en provenance directe de SWbemObjectSet, Code : 80004005, Erreur non spécifiée.

    Admettons. J'ai mis le test en commentaire pour voir ce qu'il se passe sans.

    Je suis tombé ensuite sur une erreur "Objet requis : ObjItem" se référant à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjItem.DeviceID = strNewDrive
    Me rappelant mon erreur précédente sur un objet inexistant, j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjVol.DeviceID = strNewDrive

    Là, je n'ai plus d'erreur.
    Ma variable objVol.DeviceID vaut bien P:
    Mon PC tente bien de faire qqch (allumage de la LED de la disquette par exemple), mais le lecteur F: est toujours F:




    Des idées ?




    Edit : J'ai un lecteur réseau qui s'appelle F: ça pourrait bloquer ? "normalement", Windows XP ne voit pas les disques réseaux dans son gestionnaire de disque, mais bon, on ne sait jamais ...

  13. #13
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Edit : J'ai un lecteur réseau qui s'appelle F: ça pourrait bloquer ? "normalement", Windows XP ne voit pas les disques réseaux dans son gestionnaire de disque, mais bon, on ne sait jamais ...
    LogicalDisk voit les deux, même si une autre classe est conseillé pour travaillé sur les lecteur réseau.

    Cela fait plaisirs de voir quelqu'un qui cherche de son coté et n'attends pas un code tout fait.

    Bon j'ai l'impression que Win32_LogicalDisk informe sur les lecteur logique mais ne permet pas leur configuration.
    Mon code ne fait rien, j'avais mal vérifié.
    Si tu fais un msgbox de DeviceID juste après l'avoir modifié tu constate que cela a marché, mais en fait le changement n'est en réalité pas pris en considération.

    Vas dans la partie contribution du forum vbs et regarde le sujet sur WMI Code Creator. Télécharge le soft.
    Utilise le (le dernier ongle de la fenêtre) pour avoir des renseignement sur Win32_FloppyController.
    Le premier onglet t'aidera à faire le code.
    Je n'est pas de lecteur de disquette donc je ne peut pas essayer.

    Mais pour avoir essayé avec Win32_CDROMDrive (et donc tentyer de modifier la lettre de mon lecteur de cdrom) et ne pas avoir réussi, je suis septique sur la réussite de l'opération avec Win32_FloppyController.

    Bon sinon regarde sur ce forum s'il y a des sujets équivalents (utilise recherche du forum) et si j'ai du temps demain je ferais des recherche sur google.
    Tente quelque recherche avec : VBScript change letter volume

  14. #14
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Salut,



    En fait j'aurai dû commencer par exposer mon problème en entier.


    Je vais rattraper ça.


    J'ai un lecteur réseau dont le nom est F: (qui malheureusement est utilisé par un tas d'applis internes) qui n'est pas "vu" par le gestionnaire de disques Windows.

    Résultat, tout matériel branché (CDRom, DD externe, clé USB ...) se voit attribuer cette lettre F: ce qui empèche l'accès au périphérique. Cela implique une intervention quasiment à chaque fois sur les postes des utilisateurs qui veulent se servir d'une clé USB.


    L'idée de base est donc de leur fournir une icône sur laquelle ils pourraient cliquer qui ferait de la "magie". Cette icône, ça serait un bout de code en VBS bien évidemment (ou un autre langage, je ne suis pas raciste ;-) ).

    Il faut donc que je trouve un objet qui ne voit que ce que "Gestion des disques" voit, cad les lecteurs phyisiques -d'où le Win32_DiskDrive du code initial je pense. Ce fameux Win32_DiskDrive ne gère malheuresement pas la propriété (ou méthode, je sais jamais quoi dire) DriveLetter.


    Je m'en vais donc chercher des infos comme tu me le suggères.


    Merci de ta contrib ced600 (les autres aussi hein )


    Sinon,
    Citation Envoyé par ced600
    Cela fait plaisirs de voir quelqu'un qui cherche de son coté et n'attends pas un code tout fait.
    ça fait aussi plaisir de voir quelqu'un qui croit pas que j'attends le code tout prêt (même si je dois admettre que ça ne me dérangerait pas de tomber sur un bout de code qui fonctionne comme je l'espère )


    A + pour la suite

  15. #15
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    hum c'est bizzare cette histoire de lecteur réseau non vu dans par le gestionnaire des taches.
    Peut être faudrait il fonctionner à l'inverse et rendre visible ce périphérique par le gestionnaire des taches ?

  16. #16
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Moi je n'ai aucune préférence ; je veux juste trouver une solution.


    D'après ce que j'ai compris, c'est un problème récurrent propre à Windows, et souvent les lettres des lecteurs réseau sont décrémentées depuis Z: pour cette raison.


    Je dois dire que c'est très casse ********



    Sinon WMI Code Creator est vraiment bien, c'est THE outil. Dans le même genre, y a scriptomatic2 (ui aussi de chez MS) qui est accessible uniquement après validation genuine mon *** (RDV ICI). Il est moins "beau" que Code Creator, mais bon, c'est pas bien grave.
    Il permet entre autres d'exporter directement le code dans un fichier et il permet l'exécution de code depuis le réseau en précisant une "WMI Source".

    Je n'ai pas trop eu de temps pour essayer tout ça, mais je crois que j'ai de quoi faire.


    A+

  17. #17
    Candidat au Club
    Inscrit en
    Mars 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Bonjour,






    Ben ouais, je ne m'en sors pas. Je n'arrive pas à différencier les lecteurs réseaux des lecteurs physiques, ou alors, lorsque j'y arrive, il n'y a pas de méthode pour changer la lettre.

    Ducoup j'ai un peu arrêté de réfléchir là-dessus.


    Ceci dit, si une âme charitable (ou non charitable d'ailleurs) a une idée, je prends quand même.



    Il doit bien y avoir un moyen pour que Windows voit les disques réseaux, c'est pas possible !

Discussions similaires

  1. erreur d'exécution script d'insertion
    Par od.dev dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 14
    Dernier message: 25/04/2008, 14h42
  2. Erreur d'exécution script
    Par Boris_nogues dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 14/10/2007, 11h42
  3. exécuter un script vbs depuis asp
    Par creezeer dans le forum ASP
    Réponses: 1
    Dernier message: 20/03/2006, 16h36
  4. [Système] exécuter script VBS
    Par dj-julio dans le forum Langage
    Réponses: 1
    Dernier message: 02/02/2006, 10h27
  5. Réponses: 6
    Dernier message: 29/11/2005, 13h22

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