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 :

[VBS] Organiser la sortie d'un script dans un tableau excel


Sujet :

VBScript

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 23
    Points : 11
    Points
    11
    Par défaut [RESOLU] [VBS] Organiser la sortie d'un script dans un tableau excel
    Bonjour, j'ai fait un script qui utilise les WMI afin de récupérer divers infos sur les machines de mon réseau.
    Voici le script, si vous êtes motivé pour tout lire...
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    On error Resume Next
    Const wbemFlagReturnImmediately = &h10
    Const wbemFlagForwardOnly = &h20
    arrComputers = Array("IP1","IP2")
    For Each strComputer In arrComputers
       WScript.Echo "" & strComputer
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    '==Gestion de l'erreur pour une ip non attribuée==
    If err.number <> 0 Then
       WScript.Echo "Adresse IP introuvable"
    Else
    Set colItems = objWMIService.ExecQuery ("Select Name from Win32_ComputerSystem")
    For Each objItem in colItems
       WScript.Echo "" & objitem.Name
    Next
    '==DOMAINE==
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colSettings = objWMIService.ExecQuery ("Select * from Win32_ComputerSystem")
    For Each objComputer in colSettings 
        Wscript.Echo "" & objComputer.Domain
    Next
    '==SYSTEME D'EXPLOITATION==
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem",,48)
    For Each objItem in colItems
    Wscript.Echo "" & objItem.Caption
    Next
    '==ADRESSE MAC==
    Set objWMIService = GetObject( "winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery ("Select * from Win32_NetworkAdapterConfiguration" & " where IPEnabled=TRUE")
    For Each objItem in colItems
    Wscript.Echo  "" & objItem.MACAddress
    Next
    '==RAM TOTALE SUR LA MACHINE==
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colSettings = objWMIService.ExecQuery ("Select * from Win32_ComputerSystem")
    For Each objComputer in colSettings 
        Wscript.Echo "" & objComputer.TotalPhysicalMemory & "     "
    Next
    '==LECTEURS (CD/DVD) PRESENTS SUR LA MACHINE==
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery("Select * from Win32_CDROMDrive")
    For Each objItem in colItems
        '==Type==
        Wscript.Echo "" & objItem.Description
        '==Nom==
        Wscript.Echo "" & objItem.Name 
    Next
     
    '==PROCESSEUR==
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor")
    For Each objItem in colItems
        Wscript.Echo "" &objItem.name
    Next
    '==RESOLUTION D'ECRAN==
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery("Select * from Win32_DesktopMonitor")
    For Each objItem in colItems
        Wscript.Echo "" & objItem.ScreenWidth & "x" & objItem.ScreenHeight 
    Next
    '==UTILISATEUR LOGGE==
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
    Set colComputer = objWMIService.ExecQuery ("Select * from Win32_ComputerSystem")
    For Each objComputer in colComputer
        Wscript.Echo "" & objComputer.UserName 
    Next
    '==ESPACE DISQUE==
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colDisks = objWMIService.ExecQuery ("Select * from Win32_LogicalDisk WHERE NOT (Size=null) AND
     (DeviceID='C:'OR DeviceID= 'D:' OR DeviceID='E:'OR DeviceID='F:'OR DeviceID='G:'OR DeviceID='H:'OR DeviceID='I:'")
    For Each objDisk in colDisks
        '==Lettre==
        Wscript.Echo  objDisk.DeviceID  
        '==Type==
        Wscript.Echo  "" & objDisk.Description
        '==Espace Total==
        Wscript.Echo  "" & objDisk.Size
        '==Espace Libre==
        Wscript.Echo  "" & objDisk.FreeSpace  
    Next
    '==IMPRIMANTES INSTALLEE SUR LA MACHINE==
       Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
       Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Printer", "WQL",_
                                                              wbemFlagReturnImmediately +wbemFlagForwardOnly)
       For Each objItem In colItems
          WScript.Echo "" & objItem.Caption
     Next
    WScript.Echo
    End If
    err.clear 
    Next
    Je voudrais envoyer la sortie du script dans un tableau excel afin de pourvoir l'exploité avec un autre logiciel ensuite. Or quand je tape la commande cscript test.vbs > test.xls (par exemple) ça me renvoit toutes les informations les unes à la suite des autre, ligne par ligne, comme ça :

    Et c'est là que j'ai besoin de votre aide, j'aimerais organiser toutes les infos, de cette manière :

    Donc sur la première colonne il faudrai qu'il y ai toutes les adresse IP, sur la deuxième les noms de toutes les machines, etc etc... Mais le problème c'est que chaque PC a un nombre différent de lecteur et disque dur, il n'y a pas un nombre fixe...donc ça fait une difficulté en plus :/
    Je ne sais pas si c'est faisable mais j'en appel à vous quand même, en espérant que vous pourrez m'aider.
    Merciii

  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 038
    Points
    20 038
    Par défaut
    ben avec ta redirection ... tu ne crée pas un fichier excel.. tu crée un fichier texte ( avec l'extension .Xls) qui contient tout ce qui s'affiche à l'écran lors de l'exécution de ton scrip ... les

    WScript.Echo ...
    pour mettre en forme ta feuille excel, il va te falloir gérer un objet excel dans ton projet... de la même maniére que pour accéder à excel depuis word.. ou autre

    tiens si cela peu t'inspirer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Dim xlapp ' As Excel.Application ' Il n'y as pas de type en Vbs.. mais pour mémoire
    Dim classeur ' As Excel.Workbook
    Dim feuille ' As Excel.Worksheet
    Set xlapp = CreateObject("Excel.Application")
    xlapp.Visible = True
    Set classeur = xlapp.Workbooks.add
    Set feuille = xlapp.ActiveSheet
    feuille.Range("A1") = "Rajout du texte en cellule A1"
    Classeur.Saveas "c:\tmp\MonClasseur"
    classeur.Close True 'quitte en sauvant
    xlApp.quit
    Set classeur = Nothing
    Set xlapp = Nothing

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup bbil, je vais essayer avec ce que tu m'a donné, j'vais réfléchir un peu, sachant que je ne connait strictement rien, ou presque, en script ça va être un peu chaud je pense ^^ (le script que j'ai fait j'ai utilisé scriptomatic )
    Donc je risque d'avoir encore besoin de vous, donc repassez de temps en temps sur ce topic

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    C'est bon j'ai réussi à faire tout ce que je voulait faier grace à ton petit bout de code bbil, encore un grand merci à toi
    Par contre, un dernier petit truc, quand je lance une deuxième fois le script, vu que le fichier excel est déjà créer une fois, au moment de l'enregistrement il me demande si je veux remplacer le fichier déjà existant, y'a un moyen pour que ça le remplace automatiquement sans demander?

  5. #5
    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 038
    Points
    20 038
    Par défaut
    en fait tu ve écraser le classeur pas le modifier ? si oui il te suffit de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.DisplayAlerts = False
    à adapter à ton VBS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xlapp.DisplayAlerts = False
    pour supprimer les message d'averissement...

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    C'est exactement ce que je voulait, merci merci
    Bon allez je te demande une dernière petite chose et après promis je t'embête plus ^^ :
    J'ai un autre script du même style qui liste tous les logiciels installés sur les PC ainsi que les versions des logiciels :
    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
    On error Resume Next
    Const wbemFlagReturnImmediately = &h10
    Const wbemFlagForwardOnly = &h20
    arrComputers = Array("130.130.0.100","130.130.0.157")
    cpt=1
    Dim xlapp ' As Excel.Application ' Il n'y as pas de type en Vbs.. mais pour mémoire
    Dim classeur ' As Excel.Workbook
    Dim feuille ' As Excel.Worksheet
    Set xlapp = CreateObject("Excel.Application")
    xlapp.Visible = True
    Set classeur = xlapp.Workbooks.add
    Set feuille = xlapp.ActiveSheet
    For Each strComputer In arrComputers
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    If err.number <> 0 Then
    feuille.Range("B" & cpt) = "Adresse IP introuvable"
    Else
    Set colItems = objWMIService.ExecQuery ("Select Name from Win32_ComputerSystem")
    For Each objItem in colItems
    feuille.Range("A" & cpt) = "" & objitem.Name
    Next
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colSoftware = objWMIService.ExecQuery ("Select * from Win32_Product")
    cptl=cpt
    For Each objSoftware in colSoftware
        '==Nom==
    feuille.Range("B" & cptl) = "" & objSoftware.Name
        '==Version==
    feuille.Range("C" & cptl) = "" & objSoftware.Version
    cptl=cptl+1
    Next
    end if
    err.clear
    cpt=cpt+5
    Next
    xlapp.DisplayAlerts = False
    Classeur.Saveas "c:\InfosPcLogi"
    classeur.Close True 'quitte en sauvant
    xlApp.quit
    Set classeur = Nothing
    Set xlapp = Nothing
    ça me donne donc un truc comme ça :


    Mais le problème c'est que si une machine a plus de 5 logiciels d'installé (c'est souvent le cas), le nom des derniers logiciels d'une machine sont "écrasé" par les premiers de la machine suivante...j'espère que je suis un brin compréhensible Je pourrait changer ma ligne
    cpt=cpt+5
    en mettant plus que 5, mais comme le nombre de logiciel est variable en fonction des machines, je voudrait que le listing des logiciel d'une machine commence juste après le dernier logiciel de la machine précédente...
    Je voudrais donc avoir ça :

    J'espère avoir été compréhensible, un mardi matin, après un week end de 3 jours c'est pas facile de s'y remettre

    Après promis je demande plus rien ^^

  7. #7
    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 038
    Points
    20 038
    Par défaut
    n'as tu pas donné toi même la réponse...? en changeant la ligne :

    par
    ?? d'ailleur je vois pas pourquoi tu as 2 compteurs Cpt et cpt1 ?

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Arf, oui le con, effectivement ça marche comme ça :/
    Bon bah désolé du dérangement
    Sinon, pour te répondre, j'ai cpt et cptl parce que j'ai repris la forme du code d'un autre script, où je devait avoir 2 compteur, donc c'est vrai qu'ici, un seul suffirai
    Bon bah voilà, tout est résolu.
    beaucoup bbil

Discussions similaires

  1. insérer un script dans un tableau array
    Par leuntout dans le forum Langage
    Réponses: 6
    Dernier message: 08/01/2009, 17h35
  2. [VBS] Organiser la sortie d'un script dans un table SQL
    Par Loskito dans le forum VBScript
    Réponses: 5
    Dernier message: 05/09/2007, 15h42
  3. [vb6] Ajouter une ligne dans un tableau excel
    Par Asdorve dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 13/06/2006, 16h41
  4. requêtes dans un tableau excel!? possible?
    Par flower dans le forum Access
    Réponses: 2
    Dernier message: 12/05/2006, 16h43
  5. [VBA-E] connaitre le nombre de ligne dans un tableau excel
    Par bigbarbe dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/04/2006, 10h03

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