OVH Cloud OVH Cloud

generateur d"extraction de class wmi vers csv

5 réponses
Avatar
merlin01fr
bonjour a tous

j'ai encore un soucis ....

dans le script suivant recupere dans le script center et que je tente
d'adapter en sortie csv j'ai deux problemes :

comment compter le nombre de proprietes issues d'une classe pour que des que
le compteur passe a la deuxieme propriete il ne m'inscrive pas
automatiquement "Wscript.echo" en debut de ligne.

et comment faire pour que des que la derniere propriete a ete passée il ne
m'affiche pas les derniers caracteres de ligne qui sont " & ";" & _ "

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

strComputer = "."

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

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

For each strItem in strClass.properties_

Wscript.Echo " Wscript.Echo " & chr(34) & strItem.name & chr(34) & " & " &
chr(34) & ";" & chr(34) & " & _"

Next


Wscript.Echo ""
Wscript.Echo " For each objItem in colItems" & VbCrLf

For each strItem in strClass.properties_

Wscript.Echo " Wscript.Echo " & "objItem." & strItem.name & " & " &
chr(34) & ";" & chr(34) & " & _"

Next

Wscript.Echo VbCrLf & " Next" & VbCrLf

End If
End If
Next

5 réponses

Avatar
merlin01fr
en fait c'est bon j'ai trouvé la solution

pour ceux qui seraient interessés ca sert a generer une log en fichier texte
qui contient toutes les proprietes des classes win32 preconfiguree pour
generer un fichier csv. il suffit d'ouvrir le fichier texte dans extraire le
chapitre concernant la classe desiree , et de la coller dans un fichier vbs.

etape 1 : cscript 'nom du vbs contenant le script ci dessous.vbs" >log.txt
etape 2 : ouvrir le log.txt et copier la classe qui vous interesse dans un
fichier vbs
etape 3 : cscript nom.vbs >nom.csv



Code:


strComputer = "."

Set objWMIService = GetObject("winmgmts:" & strComputer & "rootcimv2")

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

strComputer = "."

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

Wscript.Echo "On Error Resume Next" & VbCrLf
Wscript.Echo " strComputer = "& chr(34) & "." & chr(34) & VbCrLf
Wscript.Echo " Set objWMIService = GetObject(" & chr(34) &
"winmgmts:" & _
chr(34) & " & " & chr(34) & strComputer &
chr(34) & " & " & chr(34) & _
"rootcimv2" & chr(34) & ")"
Wscript.Echo " Set colItems = objWMIService.ExecQuery(" &
chr(34) & _
"Select * from" & " " & objClass.Path_.Class & chr(34) &
",,48)" & VbCrLf

CompteurPropriete = 0
CompteurTotal = 0

For each strItem in strClass.properties_

CompteurPropriete = CompteurPropriete + 1

Next

CompteurTotal = CompteurPropriete + CompteurTotal

CompteurPropriete = 0

For each strItem in strClass.properties_

CompteurPropriete = CompteurPropriete + 1

If CompteurPropriete = 1 Then _

Wscript.Echo " Wscript.Echo " & chr(34) &
strItem.name & chr(34) & " & " & _
chr(34) & ";" & chr(34) & " &
_" _

Else If CompteurPropriete <> CompteurTotal Then _

Wscript.Echo " " & chr(34) & strItem.name &
chr(34) & " & " & _
chr(34) & ";" & chr(34) & " &
_" _

Else If CompteurPropriete = CompteurTotal Then _

Wscript.Echo " " & chr(34) & strItem.name &
chr(34) _

End If
End If
End if
Next

Wscript.Echo ""
Wscript.Echo " For each objItem in colItems" & VbCrLf

CompteurPropriete = 0

For each strItem in strClass.properties_

CompteurPropriete = CompteurPropriete + 1

If CompteurPropriete = 1 Then _

Wscript.Echo " Wscript.Echo " & "objItem." &
strItem.name & " & " & chr(34) & _
";" & chr(34) & " & _" _

Else If CompteurPropriete <> CompteurTotal Then _

Wscript.Echo " " & "objItem." &
strItem.name & " & " & chr(34) & _
";" & chr(34) & " & _" _

Else If CompteurPropriete = CompteurTotal Then _

Wscript.Echo " " & "objItem." &
strItem.name _

End If
End If
End If


Next

Wscript.Echo VbCrLf & " Next" & VbCrLf

End If
End If
Next
Avatar
merlin01fr
pour ceux que ca interesse (uniquement les debutants comme moi qui seraient
surpris par la rapidite des reponses ou entre aide que l'on peut obtenir dans
les forums)

donc j'ai modifie un peu le script qui genere automatiquement les fichiers
vbs portant le nom des classes win32 et contenant toutes les proprietes de
ces classes . (pour une extraction excel)

le seul truc qui me manque c'est que je ne sais pas comment verifier la
presence des repertoires , et le cas echeant comment les creer

sinon pour que ce script marche il faut creer a la racine de c: les deux
repertoires suivants :
C:scriptsextraction

-------------------------------------------------------------------

strComputer = "."

Set objWMIService = GetObject("winmgmts:" & strComputer & "rootcimv2")

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

strComputer = "."

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

Dim fso, MonFichierCsv
Set fso = CreateObject("Scripting.FileSystemObject")
Set MonFichierCsv = fso.CreateTextFile("C:scriptsExtraction"
& objClass.Path_.Class & ".vbs", True)

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

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

CompteurTotal = CompteurPropriete + CompteurTotal
CompteurPropriete = 0
For each strItem in strClass.properties_
CompteurPropriete = CompteurPropriete + 1

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

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

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

If CompteurPropriete = 1 Then _
MonFichierCsv.WriteLine(" Wscript.Echo " & "objItem." & strItem.name &
" & " & chr(34) & _
";" & chr(34) & " & _") _
Else If CompteurPropriete <> CompteurTotal Then _
MonFichierCsv.WriteLine(" " & "objItem." & strItem.name &
" & " & chr(34) & _
";" & chr(34) & " & _") _
Else If CompteurPropriete = CompteurTotal Then _
MonFichierCsv.WriteLine(" " & "objItem." & strItem.name) _
End If _
End If _
End If
Next

MonFichierCsv.WriteLine(VbCrLf & " Next" & VbCrLf)
MonFichierCsv.Close

End If
End If
Next
Avatar
jbongran
merlin01fr wrote:
pour ceux que ca interesse (uniquement les debutants comme moi qui
seraient surpris par la rapidite des reponses ou entre aide que l'on
peut obtenir dans les forums)

donc j'ai modifie un peu le script qui genere automatiquement les
fichiers vbs portant le nom des classes win32 et contenant toutes les
proprietes de ces classes . (pour une extraction excel)

le seul truc qui me manque c'est que je ne sais pas comment verifier
la presence des repertoires , et le cas echeant comment les creer

sinon pour que ce script marche il faut creer a la racine de c: les
deux repertoires suivants :
C:scriptsextraction

-------------------------------------------------------------------

strComputer = "."

Set objWMIService = GetObject("winmgmts:" & strComputer &
"rootcimv2")

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

strComputer = "."

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

Dim fso, MonFichierCsv
Set fso = CreateObject("Scripting.FileSystemObject")
Set MonFichierCsv > fso.CreateTextFile("C:scriptsExtraction" & objClass.Path_.Class &
".vbs", True)

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

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

CompteurTotal = CompteurPropriete + CompteurTotal
CompteurPropriete = 0
For each strItem in strClass.properties_
CompteurPropriete = CompteurPropriete + 1

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

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

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

If CompteurPropriete = 1 Then _
MonFichierCsv.WriteLine(" Wscript.Echo " & "objItem." & strItem.name &
" & " & chr(34) & _
";" & chr(34) & " & _") _
Else If CompteurPropriete <> CompteurTotal Then _
MonFichierCsv.WriteLine(" " & "objItem." & strItem.name &
" & " & chr(34) & _
";" & chr(34) & " & _") _
Else If CompteurPropriete = CompteurTotal Then _
MonFichierCsv.WriteLine(" " & "objItem." & strItem.name)
_
End If _
End If _
End If
Next

MonFichierCsv.WriteLine(VbCrLf & " Next" & VbCrLf)
MonFichierCsv.Close

End If
End If
Next


Un petit bout de code, appelant une Sub (juste après la création de l'objet
fso) permet d'éviter d'avoir à creer le repertoire extraction
Call Check_prerequis()
Sub Check_prerequis()
If Not fso.FolderExists("C:scripts") Then fso.CreateFolder("C:scripts")
If Not fso.FolderExists("C:scriptsExtraction") Then
fso.CreateFolder("C:scriptsExtraction")
End Sub

Avatar
scraper
Bonjour merlin01fr, dans le message
news:
tu disais :

le seul truc qui me manque c'est que je ne sais pas comment verifier
la presence des repertoires , et le cas echeant comment les creer


quelque chose comme ça ?


'---
Option explicit

Dim oFSO, sPath

'Chemin du dossier à tester
sPath="C:TestDossier"

Set oFSO = CreateObject("Scripting.FileSystemObject")

'Si le dossier n'existe pas
If Not oFSO.FolderExists(sPath) Then
'Le crée
oFSO.CreateFolder(sPath)
'Vérifie la création
If oFSO.FolderExists(sPath) Then
MsgBox "Dossier créé"
Else
MsgBox "Echec de la création du dossier"
End If
'Si le dossier existe
Else
MsgBox "Dossier déjà existant"
End If

Set oFSO=Nothing




--

Adresse invalide
Merci de répondre sur le forum ...
http://scraper.chez-alice.fr

scraper

Avatar
merlin01fr
bonjour

merci à jbongran et scraper pour leurs reponses que je vais exploiter de ce
pas :)

Cordialement




Bonjour merlin01fr, dans le message
news:
tu disais :

le seul truc qui me manque c'est que je ne sais pas comment verifier
la presence des repertoires , et le cas echeant comment les creer


quelque chose comme ça ?


'---
Option explicit

Dim oFSO, sPath

'Chemin du dossier à tester
sPath="C:TestDossier"

Set oFSO = CreateObject("Scripting.FileSystemObject")

'Si le dossier n'existe pas
If Not oFSO.FolderExists(sPath) Then
'Le crée
oFSO.CreateFolder(sPath)
'Vérifie la création
If oFSO.FolderExists(sPath) Then
MsgBox "Dossier créé"
Else
MsgBox "Echec de la création du dossier"
End If
'Si le dossier existe
Else
MsgBox "Dossier déjà existant"
End If

Set oFSO=Nothing




--

Adresse invalide
Merci de répondre sur le forum ...
http://scraper.chez-alice.fr

scraper