Page 1 sur 1
[R] Ecrire dans un fichier XLS des infos de la base WMI
Posté : mar. 19 mai 2009 10:55
par vitweety
Bonjour,
Je voudrais savoir s'il est possible (a mon avis oui, mais je n'ai pas les connaissances pour le faire) d'écrire dans un fichier Excel à la suite de données déjà écrites dans ce même fichier.
Je voudrais prendre des infos dans la base WMI
► Afficher le texte
Code : Tout sélectionner
;detection d'information dans la base WMI
;Marque / Model et nom et taille mémoire du PC
$valeur=""
$objWMIService = ObjGet("winmgmts:\\localhost\root\CIMV2")
$colItems = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem", "WQL")
If IsObj($colItems) then
For $objItem In $colItems
Msgbox(0,"Marque",$objItem.Manufacturer)
Msgbox(0,"Type",$objItem.Model)
Msgbox(0,"nom",$objItem.Name)
Msgbox(0,"Taille mémoire",$objItem.TotalPhysicalMemory)
next
Endif
;Nom de l'OS
$colItems = $objWMIService.ExecQuery("Select * from Win32_OperatingSystem", "WQL")
If IsObj($colItems) then
For $objItem In $colItems
Msgbox(0,"OS",$objItem.Caption)
next
Endif
;Info sur le proc
$colItems = $objWMIService.ExecQuery("Select * from Win32_Processor", "WQL")
If IsObj($colItems) then
For $objItem In $colItems
Msgbox(0,"Type proc",$objItem.Name)
Msgbox(0,"Vitesse proc",$objItem.CurrentClockSpeed)
next
Endif
;Info sur le disque dur
$colItems = $objWMIService.ExecQuery("Select * from Win32_DiskDrive", "WQL")
If IsObj($colItems) then
For $objItem In $colItems
Msgbox(0,"Taille HDD",$objItem.Size)
next
Endif
Pour le moment, ça sort dans une boite de dialogue. J'ai donc un fichier déjà créé avec des données dedans. Il faudrait ne pas écraser ces données et mettre certaines données dans certaines cases.
J'ai par exemple la 1ere ligne (426) vide, et j'ai, par exemple, le nom du PC en colonne A la marque du PC en colonne F etc.. Les colonnes ne bouges pas, mais ce sont les lignes ou il faudrait prendre la 1ere qui est vide.
J'espère avoir été assez clair, si il y a quelque chose que vous comprenez pas, dites moi j'essaierais d'être plus clair.
Merci beaucoup.
Re: [..] Ecrire dans un fichier XLS des infos de la base WMI
Posté : ven. 29 mai 2009 09:13
par vitweety
J'ai reussi finalement
Voici mon code pour ceux que ça interesse :
► Afficher le texte
Code : Tout sélectionner
;detection du chassis dans la base WMI
;Marque / Model et nom du PC
$valeur=""
$objWMIService = ObjGet("winmgmts:\\localhost\root\CIMV2")
$colItems = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem", "WQL")
If IsObj($colItems) then
For $objItem In $colItems
$marque = $objItem.Manufacturer
$type = $objItem.Model
$nom = $objItem.Name
$ramN = $objItem.TotalPhysicalMemory
next
Endif
;Type de chassis :
$colItems = $objWMIService.ExecQuery("Select * from Win32_SystemEnclosure", "WQL")
If IsObj($colItems) then
For $objItem In $colItems
$strChassisTypes = $objItem.ChassisTypes(0)
$chassisN = $strChassisTypes
next
Endif
;traduction du code du chassis
if $chassisN = 8 or $chassisN = 9 or $chassisN = 10 or $chassisN = 12 or $chassisN = 14 Then
$chassis = "portable"
Else
$chassis = "fixe"
EndIf
;Version OS
$colItems = $objWMIService.ExecQuery("Select * from Win32_OperatingSystem", "WQL")
If IsObj($colItems) then
For $objItem In $colItems
$OS = $objItem.Caption
next
Endif
;Type et vitesse processeur
$colItems = $objWMIService.ExecQuery("Select * from Win32_Processor", "WQL")
If IsObj($colItems) then
For $objItem In $colItems
$type_proc = $objItem.Name
$vitesse_procN = $objItem.CurrentClockSpeed
next
Endif
;Taille du disque dur
$colItems = $objWMIService.ExecQuery("Select * from Win32_DiskDrive", "WQL")
If IsObj($colItems) then
For $objItem In $colItems
$HDDN = $objItem.Size
next
Endif
;Calcul de la taille du disque et de la mémoire en Go et la fréquence du processeur en Ghz
$HDD = Round ($HDDN/1073741824, 0)
$ram = Round ($ramN/1073741824, 1)
$vitesse_proc = Round ($vitesse_procN/1024, 2)
;Adresse mac de la carte réseau active
$MAC = _GetMACFromIP (@IPAddress1)
;MsgBox (0, "MAC Value", $MAC)
Func _GetMACFromIP ($sIP)
Local $MAC,$MACSize
Local $i,$s,$r,$iIP
;Creation de la structure
;{
; char data[6];
;}MAC
$MAC = DllStructCreate("byte[6]")
;Create a pointer to an int
; int *MACSize;
$MACSize = DllStructCreate("int")
;*MACSize = 6;
DllStructSetData($MACSize,1,6)
;call inet_addr($sIP)
$r = DllCall ("Ws2_32.dll", "int", "inet_addr", _
"str", $sIP)
$iIP = $r[0]
;Make the DllCall
$r = DllCall ("iphlpapi.dll", "int", "SendARP", _
"int", $iIP, _
"int", 0, _
"ptr", DllStructGetPtr($MAC), _
"ptr", DllStructGetPtr($MACSize))
;Formater l'adresse MAC en 00:00:00:00:00:00
$s = ""
For $i = 0 To 5
If $i Then $s = $s & ":"
$s = $s & Hex(DllStructGetData($MAC,1,$i+1),2)
Next
;Return the user readble MAC address
Return $s
EndFunc
;Copier le fichier CSV en local et le coller sur le bureau de l'administrateur :
FileCopy ("info_poste.csv", "C:\Documents and Settings\"&@UserName&"\Bureau", 1)
;Ouvrire le fichier en mode écriture
$file = FileOpen("C:\Documents and Settings\"&@UserName&"\Bureau\info_poste.csv", 1)
; Vérifier que l'on peut écrire dans le fichier
If $file = -1 Then
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIf
FileWrite($file, @ComputerName & ";" & "" & ";" & "" & ";" & "" & ";" & "" & ";" & $marque & ";" & $type & ";" _
& "" & ";" & $chassis & ";" & $type_proc & ";" & $vitesse_proc & ";" & $HDD & ";" & $ram & ";" & "" & ";" & "" & ";" & $MAC & ";" & "" & ";" & _
"" & ";" & "" & ";" & "" & ";" & "" & ";" & "" & ";" & "" & ";" & "" & ";" & $OS)
Re: [R] Ecrire dans un fichier XLS des infos de la base WMI
Posté : sam. 11 juil. 2009 15:09
par krys
Bonjour,
Merci pour ce bout de code qui vas bien m'aider

Re: [R] Ecrire dans un fichier XLS des infos de la base WMI
Posté : sam. 11 juil. 2009 18:17
par vitweety
Mais de rien.
