Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Generateur de fichier vbs issu des classes Win32 de cimv2

6 réponses
Avatar
merlin01fr
Bonjour

En esperant que ca puisse aider.

A quoi Ca sert : faire une releve d'inventaire de la machine complet

ce Script est un Extracteur de classe win32 de cimv2 vers des script vbs

l'interet est d'eviter a avoir a se farcir du code a ralonge en enumerant
chacune des proprietes de classe qe vous voullez extraire

le script cree deux repertoire sur c: qui sont
c:scriptsextraction

toutes les creations de script vbs ce trouve dans extraction

Bonne pioche

Code:

' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Generateur de fichier vbs issu des classes Win32 de cimv2 '
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Origine : issu de scriptcenter.chm ce script permettait de lister'
' L'ensemble des proprietes des classes win32 ainsi que leurs '
' Methodes, le script d'origine est trouvable sous le nom de '
' (Listing the Properties and Methods of the Win32 Classes) '
' Merci aussi a pilosite et son site www.scriptovore.com '
' Un grand expert du script se trouve derriere ce site et est pret '
' a repondre a toutes vos questions '
' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Copyright du plagieur : Gauthier Lapoujade ' Niveau : Debutant '
' alias : merlin01fr ou nathan01fr '
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Date de creation : 01/12/2005 ' Derniere Maj : 16/01/2006 '
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Modification apportée : au lieu de generer un seul fichier unique'
' de sortie , je genere un fichier vbs par classe et nommé a '
' l'identique , dans ce fichier vbs sont inclus les entetes '
' d extraction classique pour generer des fichiers vbs autonomes '
' chaque propriete traitee se termine par un separateur de champ '
' (;) qui permet une extraction de la classe vers un fichier csv '
' par la commande suivante : '
' cscript "nom de la classe a extraire".vbs >"nom du fichier de '
' sortie".csv '
' les proprietes de type date sont traitees par une function '
' qui se rajoutent automatiquement a la fin du fichier vbs si un '
' .CIMType 101 est trouve. '
' les autres proprietes (.CIMType <> 101) sont traité par une '
' convertion en format texte du contenu de leurs proprietes. '
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Mon appreciation du script : pratique mais pas encore fini '
' le gros soucis reste sur les extraction du contenu des proprietes'
' certaines proprietes me retourne leurs infos en les traitant par '
' la commande Cstr tandis que d'autre sont accecible via la '
' commande Join (les .CIMType etant identique sa n'arrange rien a '
' l affaire) '
' Idependemment de cela ca marche pas mal '
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Cette partie permet de creer les repertoires qui seront utiles a '
' l'extraction des classes wmi , changez le nom de ces repertoires '
' si vous le souhaitez le script se readaptera en fonction de vos '
' preferences '
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

RepDeBase = "c:\Scripts"
SousRepDeBase = "c:\scripts\extraction"

Set fso = CreateObject("Scripting.FileSystemObject")

If Not fso.FolderExists(RepDeBase) Then
fso.CreateFolder(RepDeBase)
End If

If Not fso.FolderExists(SousRepDeBase) Then
fso.CreateFolder(SousRepDeBase)
End If

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Cette partie de script recherche un Qualificateur de type '
' Nommé (ASSOCIATION) au sein de classe commencant par win32 dans '
' l espace de nom \root\cimv2 '
' Cette partie est issue du script initial du scriptcenter , mais '
' etant donné que je pas encore tres bien documenté sur les '
' Qualificateurs je ne peux pas en dire plus '
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

For Each objclass in objWMIService.SubclassesOf()

intCounter=0

If Left(objClass.Path_.Class,5) = "Win32" Then

For Each Qualifier in objClass.Qualifiers_

If UCase(Trim(Qualifier.Name)) = "ASSOCIATION" Then
intCounter = 1
End If
Next
'test a vide
If toto = 0 Then

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Dans cette partie je cree les fichiers vbs portant le nom de la '
' classe traitée , chacune des proprietes ou nom de classe se rempli '
' automatiquement '
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


strComputer = "."

Set objWMIService = GetObject
("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set strClass = objWMIService.Get(objClass.Path_.Class)

Dim fso, MonFichierVbs

Set fso = CreateObject("Scripting.FileSystemObject")
Set MonFichierVbs = fso.CreateTextFile(SousRepDeBase &
chr(92) & objClass.Path_.Class & ".vbs", True)


MonFichierVbs.WriteLine("On Error Resume Next" & VbCrLf)
MonFichierVbs.WriteLine(" strComputer = "& chr(34) & "." &
chr(34) & VbCrLf)
MonFichierVbs.WriteLine(" Set objWMIService = GetObject(" &
chr(34) & "winmgmts:\\" & _
chr(34) & " & strComputer & " & chr(34) &
"\root\cimv2" & chr(34) & ")")
MonFichierVbs.WriteLine(" Set colItems =
objWMIService.ExecQuery(" & chr(34) & _
"Select * from" & " " & objClass.Path_.Class & chr(34) &
",,48)" & VbCrLf)

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' d a partir d ici j insere un compteur de propriete , ce compteur '
' servira a traiter chaque propriete , par exemple pour la premiere '
' il faut rajouter wscript.echo au debut mais pas sur les suivantes '
' sur la derniere propriete il faut suprimer le separateur de champ '
' passer une ligne et rajouter un next '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

CompteurPropriete = 0
CompteurTotal = 0

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Dans cette boucle je compte le nombre le nombre total de proprietes '
' de la classe traitée '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

For each strItem in strClass.properties_
CompteurPropriete = CompteurPropriete + 1
Next

CompteurTotal = CompteurPropriete + CompteurTotal

CompteurPropriete = 0

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' les quatre lignes ci dessous commencant par MonFichierVbs sont '
' identique sur chacun des fichiers vbs de generé, le traitement reel '
' des proprietes ne commence qu'a la ligne : '
' For each strItem in strClass.properties_ '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

MonFichierVbs.WriteLine(" Wscript.Echo " & chr(34) & "Nom
du Poste" & chr(34) & " & " & _
chr(34) & ";" & chr(34) & " & _")
MonFichierVbs.WriteLine(" " & chr(34) &
"Session Active" & chr(34) & " & " & _
chr(34) & ";" & chr(34) & " & _")
MonFichierVbs.WriteLine(" " & chr(34) &
"Date" & chr(34) & " & " & _
chr(34) & ";" & chr(34) & " & _")
MonFichierVbs.WriteLine(" " & chr(34) &
"Heure" & chr(34) & " & " & _
chr(34) & ";" & chr(34) & " & _")

For each strItem in strClass.properties_

CompteurPropriete = CompteurPropriete + 1


If CompteurPropriete <> CompteurTotal Then
MonFichierVbs.WriteLine(" " & chr(34) &
strItem.name & chr(34) & " & " & _
chr(34) & ";" & chr(34) & " & _")
Else If CompteurPropriete = CompteurTotal Then
MonFichierVbs.WriteLine(" " & chr(34) &
strItem.name & chr(34))
End If
End if
Next

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Pour ceux qui voudrait creer un script de relevé d'inventaire sur '
' un parc vous pouvez rajouter ici une cloture de fichier '
' MonFichierVbs qui ne contiendra que les entetes de colonnes et a la '
' suite creer une deuxieme creation de fichier contenant les formules '
' proprietés et fonction . '
' a la suite ca vous faites un petit fichier batch (je sais pas encore'
' le faire en vbs) qui dira si le fichier %entete-mois% existe, je ne '
' lance que le deuxieme fichier pour incrementer celui qui existe deja'
' sinon je cree le fichier csv avec le fichier d entete et a la suite '
' je l incremente avec le deuxieme fichier vbs '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Ici je commence a rebasculer les proprietés vers le fichier vbs '
' de la classe active , je detecte les proprieté de type date pour '
' leur appliquer 3 traitement , le premier consiste a leur rajouter '
' une entete du style Date (ce qui permet de les reperer plus '
' facilement au milieu des autres proprieté) , le second traitement '
' consiste a les aiguiller vers une fonction qui traitera la date pour'
' la resortir dans un format plus lisible (si une propriete de date '
' est trouvée j'ecris la fonction TriVracDate a la fin du fichier vbs '
' le troisieme traitement consiste a mettre a 1 une variable (cette '
' variable sera testé pourvoir si la fonction TriVracDate doit etre '
' ecrite ou non . '
' Pour les proprietes de type autre que Date je rajoute une entete str'
' et j'applique une fonction de convertion de chaine (Cstr) '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

MonFichierVbs.WriteLine("")
MonFichierVbs.WriteLine(" For each objItem in colItems" &
VbCrLf)

CompteurPropriete = 0
AppelFunctionDate = 0

MonFichierVbs.WriteLine(" Set WshNetwork =
WScript.CreateObject (" & chr(34) & "WScript.Network" & chr(34) & ")")
MonFichierVbs.WriteLine(" NomDuPoste = " &
"WshNetwork.ComputerName")
MonFichierVbs.WriteLine(" SessionActive = " &
"WshNetwork.UserName")
' MonFichierVbs.WriteLine(" MaDate = " & Date)
' MonFichierVbs.WriteLine(" MonHeure = " & Time)


For each strItem in strClass.properties_

If strItem.CIMType <> 101 Then
MonFichierVbs.WriteLine(" str" &
strItem.Name & " = Cstr(objItem." & strItem.Name & ")")
End If

If strItem.CIMType = 101 Then
MonFichierVbs.WriteLine(" Date" &
strItem.name & " = TriVracDate(objItem." & strItem.name & ")")
End If

Next

MonFichierVbs.WriteLine(VbCrLf & " Wscript.Echo NomDuPoste &
" & chr(34) & ";" & chr(34) & " & _")
MonFichierVbs.WriteLine(" SessionActive & " &
chr(34) & ";" & chr(34) & " & _")
MonFichierVbs.WriteLine(" Date & " & chr(34) &
";" & chr(34) & " & _")
MonFichierVbs.WriteLine(" Time & " & chr(34) &
";" & chr(34) & " & _")


For each strItem in strClass.properties_

CompteurPropriete = CompteurPropriete + 1

If strItem.CIMType <> 101 And _
CompteurPropriete <> CompteurTotal Then
MonFichierVbs.WriteLine(" Str" &
strItem.name & " & " & chr(34) & ";" & chr(34) & " & _")
End If

If strItem.CIMType = 101 And _
CompteurPropriete <> CompteurTotal Then
MonFichierVbs.WriteLine(" Date" &
strItem.name & " & " & chr(34) & ";" & chr(34) & " & _")
End If

If strItem.CIMType = 101 Then
AppelFunctionDate = 1
End If

If strItem.CIMType = 101 And _
CompteurPropriete = CompteurTotal Then
MonFichierVbs.WriteLine(" Date" &
strItem.name)
End If

If strItem.CIMType <> 101 And _
CompteurPropriete = CompteurTotal Then
MonFichierVbs.WriteLine(" Str" &
strItem.name)
End If

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' si une propriete de type date est trouvée la variable '
' AppelFunctionDate est passée a 1 et si le compteur de propriete est '
' egal au compteur total (signifiant qu'il n'y a plus de proprieté a '
' traiter la fonction TriVracDate peut etre ecrite '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

If AppelFunctionDate = 1 And _
CompteurPropriete = CompteurTotal Then
MonFichierVbs.WriteLine(VbCrLf & " Next" & VbCrLf)

MonFichierVbs.WriteLine(" Function TriVracDate(CaDate)" &
VbCrLf)
MonFichierVbs.WriteLine(" TriVracDate = (Left(CaDate,
4) & " & chr(34) & "/" & chr(34) & " & Mid(CaDate, 5, 2) & " _
& chr(34) & "/" & chr(34) & " & Mid(CaDate, 7, 2) & _")
MonFichierVbs.WriteLine(" " & chr(34) & "
- (" & chr(34) & " & (Mid(CaDate, 9, 2) & " & chr(34) & ":" & chr(34) & _
" & Mid(CaDate, 11, 2) & " & chr(34) & ":" &
chr(34) & " & Mid(CaDate, 13, 2))) & " & chr(34) & ")" & chr(34) & VbCrLf)
MonFichierVbs.WriteLine(" End Function" & VbCRLf)

Else If AppelFunctionDate <> 1 And _
CompteurPropriete = CompteurTotal Then
MonFichierVbs.WriteLine(VbCrLf & " Next" & VbCrLf)
End If
End If

Next
End If
End If

Next

MonFichierVbs.Close




Etant debutant si vous avez des remarques a faire je suis preneur

Cordialement

6 réponses

Avatar
merlin01fr
bonjour

dixit le message precedent, si vous pouviez me dire ce que vous en pensez ,
se serait super .

Cordialement
Avatar
Jacques Barathon [MS]
"merlin01fr" wrote in message
news:
bonjour

dixit le message precedent, si vous pouviez me dire ce que vous en pensez
,
se serait super .


Je n'ai pas testé, mais ça m'a l'air de ressembler à Scriptomatic (dispo sur
le Script Center je crois). Non?

Jacques

Avatar
merlin01fr
bonjour

Je n'ai pas testé, mais ça m'a l'air de ressembler à Scriptomatic (dispo sur
le Script Center je crois). Non?


Par dispo sur le scriptcenter tu veux dire le code ? (le soft oui je l'ai)
mais pas le code

ca ressemble au scriptomatic sur le principe sauf qu'a mon avis il faut plus
avoir confiance dans leur syntaxe que dans la mienne (c'est mon premier
programme), il y a deux mois je ne connaissais rien a la programmation.

sauf que je genere toutes les extractions de classe win32 en fichiers vbs ,
ce qui represente pres de 500 fichiers vbs .

et je que je trouve d'assez desagreable sur le scriptomatic c'est qu'on est
obligé de faire du copier coller sur une classe pour la recopier ensuite dans
un fichier qu'on renomme en nom .vbs , moi je le fais directement en vbs et
exploitable sur excel.

Cordialement

Avatar
Jean
Par dispo sur le scriptcenter tu veux dire le code ? (le soft oui je l'ai)
mais pas le code


Editez le fichier scritomatic.HTA dans notepad ou autre.


Amicalement,

--
Jean - JMST
Belgium

Avatar
merlin01fr
je vais voir , mais de base je ne me suis pas inspiré de leur code , mais
j'ai cree le mien pour en faire resortir les infos que je souhaitais

Cordialement


Par dispo sur le scriptcenter tu veux dire le code ? (le soft oui je l'ai)
mais pas le code


Editez le fichier scritomatic.HTA dans notepad ou autre.


Amicalement,

--
Jean - JMST
Belgium






Avatar
Jean
je vais voir , mais de base je ne me suis pas inspiré de leur code , mais
j'ai cree le mien pour en faire resortir les infos que je souhaitais



C'est toujours plus instructif de faire ses codes soi même.

Scriptomatic peut vous donner des idées ou vous pouvez l'aggrémenter.
Par exemple pour copier tout les scripts dans un répertoire, vous
pouvez ajouter un bouton dans la dernière cellule du tableau (voir en
fin de page de scriptomatic):

<input class="bigger_button" TYPE=BUTTON VALUE="Build all files"
onClick="SaveAllScripts()">

et insérer la routine suivante dans la balise <script> :

'---8<---ScriptOMatic-SaveAllScripts---Jean-JMST-Belgium---
Sub SaveAllScripts()
Set FSO=CreateObject("Scripting.FileSystemObject")
strSaveFolder = InputBox("Please enter the directory where you want"
&_
" to save your scripts (for example, C:Scripts).","Save All
Scripts","C:scripts")
If strSaveFolder = "" Then
Exit Sub
End If
Select Case g_strCurrentLanguage
Case "VBScript"
ext="vbs"
Case "JScript"
ext="js"
Case "Perl"
ext="pl"
Case "Python"
ext="py"
End Select
With Document.All.Tags("SELECT")(1)
If .Options.Length<2 Then Exit Sub
With FSO
If Not .FolderExists(strSaveFolder) Then
.CreateFolder(strSaveFolder)
End With
.Focus
For z=1 To .Options.Length-1
With .Options(z)
.Selected=True
strFileName=.Value
End With
.FireEvent("OnChange")
With FSO
With
.CreateTextFile(.BuildPath(strSaveFolder,strFileName&"."&ext),True)
.Write code.InnerText
.Close
End With
End With
Next
End With
Alert "Done."
End Sub
'---8<---ScriptOMatic-SaveAllScripts---Jean-JMST-Belgium---

Cordialement


Par dispo sur le scriptcenter tu veux dire le code ? (le soft oui je l'ai)
mais pas le code


Editez le fichier scritomatic.HTA dans notepad ou autre.


Amicalement,

--
Jean - JMST
Belgium






Amicalement,

--
Jean - JMST
Belgium