PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → WMI récupérer OS d'un pc distant
WMI récupérer OS d'un pc distant
Débuté par gilly, 27 nov. 2006 18:15 - 9 réponses
Posté le 27 novembre 2006 - 18:15
Bonjour à tous, je voulais savoir si vous pouviez m'aider à faire un code pour récupérer la version de l'os et son service pack situé sur un pc d'un reseau . A savoir que j'ai l'ip et le login des postes reseaux.

Merci encore.
Posté le 27 novembre 2006 - 20:40
Bonjour
v'la une fonction qui te revoie tout ce qui est disponible dans la classe
Win32_OperatingSystem


FUNCTION GetOSInformations(pComputerName=NetNomMachine())

objWMIService est un objet Automation "MSScriptControl.ScriptControl"
ProgrammeVbs est une chaîne
ResultatVbs est une chaîne

ProgrammeVbs = "Function GetOSInformations(ComputerName)" CRLF
//
ProgrammeVbs = "On Error Resume Next" CRLF
ProgrammeVbs = "strComputer = ComputerName" CRLF
ProgrammeVbs = "strResult = " Caract(34) Caract(34) CRLF
ProgrammeVbs = "Set objWMIService =
GetObject(" Caract(34) "winmgmts:\\" Caract(34) " & strComputer &
" Caract(34) "\root\cimv2" Caract(34) ")" CRLF
ProgrammeVbs = "Set colItems = objWMIService.ExecQuery(" Caract(34) "Select
* from Win32_OperatingSystem" Caract(34) ",,48)" CRLF
ProgrammeVbs = "For Each objItem in colItems" CRLF

ProgrammeVbs = "strResult = objItem.BootDevice & chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.BuildNumber & chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.BuildType & chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.Caption & chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.CodeSet & chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.CountryCode & chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.CreationClassName & chr(9)"
CRLF
ProgrammeVbs = "strResult = strResult & objItem.CSCreationClassName &
chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.CSDVersion & chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.CSName & chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.CurrentTimeZone & chr(9)"
CRLF
ProgrammeVbs = "strResult = strResult & objItem.Debug & chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.Description & chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.Distributed & chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.ForegroundApplicationBoost
& chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.FreePhysicalMemory &
chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.FreeSpaceInPagingFiles &
chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.FreeVirtualMemory & chr(9)"
CRLF
ProgrammeVbs = "strResult = strResult & objItem.InstallDate & chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.LastBootUpTime & chr(9)"
CRLF
ProgrammeVbs = "strResult = strResult & objItem.LocalDateTime & chr(9)"
CRLF
ProgrammeVbs = "strResult = strResult & objItem.Locale & chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.Manufacturer & chr(9)"
CRLF
ProgrammeVbs = "strResult = strResult & objItem.MaxNumberOfProcesses &
chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.MaxProcessMemorySize &
chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.Name & chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.NumberOfLicensedUsers &
chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.NumberOfProcesses & chr(9)"
CRLF
ProgrammeVbs = "strResult = strResult & objItem.NumberOfUsers & chr(9)"
CRLF
ProgrammeVbs = "strResult = strResult & objItem.Organization & chr(9)"
CRLF
ProgrammeVbs = "strResult = strResult & objItem.OSLanguage & chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.OSProductSuite & chr(9)"
CRLF
ProgrammeVbs = "strResult = strResult & objItem.OSType & chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.OtherTypeDescription &
chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.PlusProductID & chr(9)"
CRLF
ProgrammeVbs = "strResult = strResult & objItem.PlusVersionNumber & chr(9)"
CRLF
ProgrammeVbs = "strResult = strResult & objItem.Primary & chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.QuantumLength & chr(9)"
CRLF
ProgrammeVbs = "strResult = strResult & objItem.QuantumType & chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.RegisteredUser & chr(9)"
CRLF
ProgrammeVbs = "strResult = strResult & objItem.SerialNumber & chr(9)"
CRLF
ProgrammeVbs = "strResult = strResult & objItem.ServicePackMajorVersion &
chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.ServicePackMinorVersion &
chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.SizeStoredInPagingFiles &
chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.Status & chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.SystemDevice & chr(9)"
CRLF
ProgrammeVbs = "strResult = strResult & objItem.SystemDirectory & chr(9)"
CRLF
ProgrammeVbs = "strResult = strResult & objItem.TotalSwapSpaceSize &
chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.TotalVirtualMemorySize &
chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.TotalVisibleMemorySize &
chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.Version & chr(9)" CRLF
ProgrammeVbs = "strResult = strResult & objItem.WindowsDirectory & chr(13)
& chr(10)" CRLF
ProgrammeVbs = "Next" CRLF
ProgrammeVbs = "GetOSInformations = strResult" CRLF
ProgrammeVbs = "End Function"

objWMIService>>Language("VBScript")
objWMIService>>Reset()
WHEN EXCEPTION IN
objWMIService>>AddCode(ProgrammeVbs)
DO
Erreur("Erreur dans le programme vbs...")
RENVOYER ""
END

ResultatVbs = ""
WHEN EXCEPTION IN
ResultatVbs =
objWMIService>>Eval("GetOSInformations(" Caract(34) pComputerName Caract(34) ")")
DO
Erreur("Erreur d'execution du programme vbs")
RENVOYER ""
END

IF ResultatVbs<>"" THEN ResultatVbs = ResultatVbs[[1 sur
Taille(ResultatVbs)-2]]

RENVOYER ResultatVbs


"gilly" <guest@newsgroup.fr> a écrit dans le message de news:
456b0d3d$1@news.pcsoft.fr...


Bonjour à tous, je voulais savoir si vous pouviez m'aider à faire un code
pour récupérer la version de l'os et son service pack situé sur un pc d'un
reseau . A savoir que j'ai l'ip et le login des postes reseaux.

Merci encore.
Posté le 28 novembre 2006 - 07:12
Désolé de devoir te poser des questions idiotes mais quand je copie ce code dans une nouvelle fenetre j'ai plein d'erreurs :-(

Faut que je copie ce code dans quoi ?

J'affiche comment le resultat dans Sai_Saisie1 par exemple.

Encore merci pour ta patience
Posté le 28 novembre 2006 - 14:37
Bonjour
C'est une FONCTION
perso je les mets dans des "collections de procédure" ce qui permet de les
réutiliser

"gilly" <guest@newsgroup.fr> a écrit dans le message de news:
456b389d$1@news.pcsoft.fr...


Désolé de devoir te poser des questions idiotes mais quand je copie ce
code dans une nouvelle fenetre j'ai plein d'erreurs :-(

Faut que je copie ce code dans quoi ?

J'affiche comment le resultat dans Sai_Saisie1 par exemple.

Encore merci pour ta patience

Posté le 28 novembre 2006 - 15:28
Attention je viens de m'appercevoir que le signe [plus] a dégagé de mon
mail....

1ere ligne
ProgrammeVbs = "Function GetOSInformations(ComputerName)" [plus] CRLF
les autres
ProgrammeVbs [plus] = "On Error Resume Next" [plus] CRLF



"Philippe Pasquali" <philippe.pasquali@bopack.com> a écrit dans le message
de news: 456c2123$1@news.pcsoft.fr...

Bonjour
C'est une FONCTION
perso je les mets dans des "collections de procédure" ce qui permet de les
réutiliser

"gilly" <guest@newsgroup.fr> a écrit dans le message de news:
456b389d$1@news.pcsoft.fr...


Désolé de devoir te poser des questions idiotes mais quand je copie ce
code dans une nouvelle fenetre j'ai plein d'erreurs :-(

Faut que je copie ce code dans quoi ?

J'affiche comment le resultat dans Sai_Saisie1 par exemple.

Encore merci pour ta patience



Posté le 28 novembre 2006 - 17:56
Peut tu m'indiquer la source de ton code s'il te plait car j'ai encore plein d'annomalies.

exemple ci dessous :

FUNCTION GetOSInformations(pComputerName=NetNomMachine())

objWMIService est un objet Automation "MSScriptControl.ScriptControl"
ProgrammeVbs est une chaîne
ResultatVbs est une chaîne

ProgrammeVbs = "Function GetOSInformations(ComputerName)" + CRLF
//
ProgrammeVbs += "On Error Resume Next" + CRLF
ProgrammeVbs += "strComputer = ComputerName" + CRLF

// les erreurs commence a partir d'ici avec par exemple "strEsult" qui est souligné ://

ProgrammeVbs += "strResult = " Caract(34) Caract(34) + CRLF
ProgrammeVbs += "Set objWMIService = GetObject(" Caract(34) "winmgmts:\\" Caract(34) " & strComputer &" Caract(34) "\root\cimv2" Caract(34) ")" + CRLF
ProgrammeVbs += "Set colItems = objWMIService.ExecQuery(" Caract(34) "Select * from Win32_OperatingSystem" Caract(34) ",,48)" + CRLF
ProgrammeVbs += "For Each objItem in colItems" + CRLF
ProgrammeVbs += "strResult = objItem.BootDevice & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.BuildNumber & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.BuildType & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.Caption & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.CodeSet & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.CountryCode & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.CreationClassName & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.CSCreationClassName & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.CSDVersion & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.CSName & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.CurrentTimeZone & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.Debug & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.Description & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.Distributed & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.ForegroundApplicationBoost & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.FreePhysicalMemory & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.FreeSpaceInPagingFiles & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.FreeVirtualMemory & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.InstallDate & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.LastBootUpTime & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.LocalDateTime & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.Locale & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.Manufacturer & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.MaxNumberOfProcesses & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.MaxProcessMemorySize & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.Name & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.NumberOfLicensedUsers & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.NumberOfProcesses & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.NumberOfUsers & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.Organization & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.OSLanguage & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.OSProductSuite & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.OSType & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.OtherTypeDescription & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.PlusProductID & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.PlusVersionNumber & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.Primary & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.QuantumLength & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.QuantumType & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.RegisteredUser & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.SerialNumber & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.ServicePackMajorVersion & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.ServicePackMinorVersion & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.SizeStoredInPagingFiles & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.Status & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.SystemDevice & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.SystemDirectory & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.TotalSwapSpaceSize & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.TotalVirtualMemorySize & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.TotalVisibleMemorySize & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.Version & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.WindowsDirectory & chr(13) & chr(10)" + CRLF
ProgrammeVbs += "Next" + CRLF
ProgrammeVbs += "GetOSInformations = strResult" + CRLF
ProgrammeVbs += "End Function"

objWMIService>>Language("VBScript")
objWMIService>>Reset()
WHEN EXCEPTION IN
objWMIService>>AddCode(ProgrammeVbs)
DO
Erreur("Erreur dans le programme vbs...")
RENVOYER ""
END

ResultatVbs = ""
WHEN EXCEPTION IN
ResultatVbs =
objWMIService>>Eval("GetOSInformations(" Caract(34) pComputerName Caract(34) ")")
DO
Erreur("Erreur d'execution du programme vbs")
RENVOYER ""
END

IF ResultatVbs<>"" THEN ResultatVbs = ResultatVbs[[1 sur
Taille(ResultatVbs)-2]]

RENVOYER ResultatVbs
Posté le 28 novembre 2006 - 18:19
c'est bon j'ai rectifié le code en mettant des + devant chaque "CARACT"

par contre si je veux le resultat dans un champs de saisie ?

sai_saisie = GetOsIformation ?
Posté le 28 novembre 2006 - 22:06
InfoComputer est une chaine = GetOsIformation(<Nom du pc, par défaut celui
sur lequel s'execute le programme>)

Apres tu peut extraire :
ChampDeTaFenêtre = ExtraitChaine(InfoComputer, <numero du champ qui
t'interresse>)

Exemple sur mon PC
ExtraitChaine(InfoComputer, 4) affiche "Microsoft Windows XP
Professionnel"
ExtraitChaine(InfoComputer,9) affiche "Service Pack 2"
ExtraitChaine(temp,41) affiche "76413-OEM-0011903-00101"
etc.......

"gilly" <guest@newsgroup.fr> a écrit dans le message de news:
456c610e$1@news.pcsoft.fr...


c'est bon j'ai rectifié le code en mettant des devant chaque "CARACT"

par contre si je veux le resultat dans un champs de saisie ?

sai_saisie = GetOsIformation ?


Posté le 29 novembre 2006 - 20:40
Merci beaucou ca fonctionne, maintenant il faut que je puisse donner en condition pour me connecter a une machine mon login et mon mot de pass Administrateur.
Posté le 13 octobre 2007 - 12:18
Tout le code fonctionne à merveille mis a part que si je l'execute a partir de mon pc (je me suis mis administrateur du pc) la fonction ne me renvoie rien. Par contre si je lance mon logiciel "en tant que super admin du reseau" , la fonction est operationnel. Bien entendu je souhaiterai ne pas modifier mon compte sur l'active directory.

Pouvez vous m'aider ?