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 :

Utilisation de 2 objets WMI en simultané


Sujet :

VBScript

  1. #1
    Membre confirmé Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Points : 582
    Points
    582
    Par défaut Utilisation de 2 objets WMI en simultané
    Bonjour,

    Je voudrais réaliser un script vbs qui référencerait, pour une machine XP, toutes les imprimantes connectées et leur nom de port, ainsi que les noms et les versions des drivers associés.

    Pour celà, je veux utiliser les objets WMI Win32_Printer, qui permet de récupérer (entre autres) le nom des imprimantes et leur port, et l'objet WMI Win32_PrinterDriver, qui permet de récuperer les noms/chemins des drivers et leur version.

    Ce que je voudrais savoir : Serait-il possible de traiter ces 2 objets (qui traitent des mêmes imprimantes) en même temps? Et si oui, comment?

    Cette opération, si elle est réalisable, serait beaucoup plus optimisée et performante que le stockage des infos recherchées pour chaque objet et la mise en relation fastidieuse entres les résultats.

    Merci de votre aide.
    pitchalov

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 57
    Points : 47
    Points
    47
    Par défaut
    tu pourrais effectivement traiter le 2 en même temps en faisant une requete wmi imbriquer dans le traitement de la 1ère.

    J'ai effectué un truc du même genre pour un inventaire disque et partition.

    j'effectue une requete wmi sur une classe qui me reference les informations sur les disques physiques puis avec une requete imbriqué dans le 1er next je fais une seconde requete wmi sur une autre classe qui référence les infos sur les partitions.

    le tout me remonte les infos sur le dique physique et les partitions qui lui sont propre.

    Il te faut le dénominateur commun entre les 2 classes wmi pour les classes qui te concerne il me semble que c'est "DriverName" pour Win32_Printer et "Name" pour Win32_PrinterDriver.

    En espérant t'avoir aidé.

  3. #3
    Membre confirmé Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Points : 582
    Points
    582
    Par défaut
    Merci gpanpan pour ton aide, c'est exactement ce que j'avais fait.

    Je me demandais juste si c'était possible d'avoir une solution plus optimisée, c'est à dire pas une boucle de récupération d'infos WMI à l'intérieur d'une autre.

    Voilà le bout de code pour les intéressés :
    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
     
    strComputer = "."
     
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
     
    Set colInstalledPrinters =  objWMIService.ExecQuery("Select * from Win32_Printer")
    Set colPrinterDrivers = objWMIService.ExecQuery ("Select * from Win32_PrinterDriver")
     
    For Each objPrinter in colInstalledPrinters
    	strPrinterPort = LCase(objPrinter.PortName)
    	strPrinterName = objPrinter.Name
    	strDriverName = objPrinter.DriverName
    	If objPrinter.Network = True Then
    		strPortType = "Réseau"
    	Else
    		strPortType = "Local"
    	End If
     
    	For Each objDriver in colPrinterDrivers
    		arrDriverName = Split(objDriver.Name, ",")
    		If strDriverName = arrDriverName(0) Then
    			strDriverPath = objDriver.DriverPath
    			strVersion = objDriver.Version
    		End If
    	Next
           WScript.Echo strPrinterName & ";" & strPrinterPort & ";" & strPortType & ";" & strDriverName & ";" & strDriverPath & ";" & strVersion
    Next
    Voilà.

    Je ne mets pas Résolu, du fait que je n'aie pas eu, au final, la réponse que j'attendais, c'est à dire l'optimisation. Mais aussi peut-être qu'il n'est pas possible de faire autrement... ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 57
    Points : 47
    Points
    47
    Par défaut
    j'étais justement dans l'écriture du code pour te le donner !

    Mais tu l'as déjà

    Ben pour moi il n'y pas moyen autrement à moins qu'il existe une classe qui le permette mais pas à ma connaissance. Ou alors il faut la créer mais là ce n'est pas dans mes compétences !

    sinon regarde prnmngr.vbs

    Peut être tu trouveras ce que tu recherche, mais ça fait longtemps que je ne l'ai pas utilisé je ne sais pas si il te donnera satisfaction.

    A+

  5. #5
    Membre confirmé Avatar de pitchalov
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 340
    Points : 582
    Points
    582
    Par défaut
    Merci quand même pour ton aide.
    Je me suis aussi servi de ce script pour la récupération d'informations ==> pourquoi recoder ce qui existe déjà?

    Allez à +

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 57
    Points : 47
    Points
    47
    Par défaut
    la commande est :
    C:\WINDOWS\system32>cscript prnmngr.vbs -l

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/08/2006, 10h12
  2. [COM] Utilisation d'un objet COM
    Par Sophy75 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 03/04/2006, 18h43
  3. Message d'erreur lors d'utilisation d'un Objet
    Par dirty_boy dans le forum Langage
    Réponses: 3
    Dernier message: 28/10/2005, 16h16
  4. Réponses: 4
    Dernier message: 25/10/2005, 08h48

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