PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2024 → Obtenir WMi Object
Obtenir WMi Object
Iniciado por Axel PICHON, 23,ago. 2021 12:16 - 37 respuestas
Miembro registrado
15 mensajes
Publicado el 23,agosto 2021 - 12:16
Bonjour,

Je suis familiarisé avec PowerShell comment obtenir un équivalent de la commande Get-WmiObject sous WinDev svp ?

Merci
Miembro registrado
962 mensajes
Popularité : +183 (185 votes)
Publicado el 23,agosto 2021 - 14:05
hello,
voici l'équivalent de :
Get-WmiObject -query "SELECT * FROM Win32_logicalDisk WHERE DeviceID = 'C:'"

en utilisant l'assemblage System.Management dans Windev :
objDisque est un ManagementObject dynamique
prop est une PropertyData dynamique
MaRechercheWMI est un ManagementObjectSearcher("SELECT * from WIN32_LogicalDisk Where DeviceID = 'C:'")
ColDisques est un ManagementObjectCollection dynamique = MaRechercheWMI.Get()
Trace("=========================================")
POUR TOUT objDisque de ColDisques
POUR TOUTE prop de objDisque.Properties
SI prop.Value <> Null ALORS Trace(prop.Name, " : ",prop.Value )
FIN
Trace("la valeur de la propriété DeviceID est : ",objDisque.Properties.get_Item("DeviceID").Value)
FIN


et voici le résultat :






--
Ami calmant, J.P
Miembro registrado
15 mensajes
Publicado el 23,agosto 2021 - 20:43
Merci mais ca me parait compliqué...

Je vais lancé un script Powershell en silencieux afin d'ecrire dans la base de registre les informations dont j'ai besoin et les recuperer dans WinDev
Miembro registrado
874 mensajes
Popularité : +39 (51 votes)
Publicado el 23,agosto 2021 - 20:50
Bonsoir Axel,
L'exemple et code de @Jurassic Pork est simple et opérationnel ;)

Tu peux t'en inspirer :merci:

Bon dev
Christian

--
Christian - kick71
Publicado el 24,octubre 2021 - 21:12
Bonjour.

Avec un copier/coller de votre code, les 4ère lignes sont en rouge.
Il me manque quelque chose. une déclaration quelque par.
Genre ManagementObject est un objet Automation dynamique
Merci pour votre aide.
J'apprendrai quelques de plus grâce à vous.
ciao
Miembro registrado
962 mensajes
Popularité : +183 (185 votes)
Publicado el 25,octubre 2021 - 10:43
hello,
System.management est un assemblage dotnet --> Atelier/dotnet/ajouter un assemblage

--
Ami calmant, J.P
Publicado el 25,octubre 2021 - 11:02
Bonjour.

C'est une partie de Windev que je n'ai jamais utilisée.
Le code fonctionne. Je vais m'en inspirer.

Merci
Publicado el 25,octubre 2021 - 14:18
Je suis désolé, je code fonctionne mais je n'y arrive pas avec cette commande de base :
Get-WmiObject -query "SELECT * FROM Win32_diskdrive"

Je veux récupérer "Model", "Size" et "DeviceID"

Il me faut plusieurs modèles pour comprendre et adapter les futurs codes avec Get-WmiObject
Merci
Publicado el 25,octubre 2021 - 18:02
Le 25/10/2021 à 08:43, Jurassic Pork a écrit :
hello,
System.management est un assemblage dotnet   --> Atelier/dotnet/ajouter
un assemblage

--
Ami calmant, J.P


Bonjour,
Je suis intéressé par ce code, mais je ne trouve pas le moyen d'utiliser
un assemblage dotnet.
Je ne trouve pas le menu Atelier/dotnet/ajouter
J'ai essayé Projet/Importer/Un assemblage .net sans succès : j'ai
l'erreur "Le chargement de la DLL wd260net4.dll a échoué", code 3690001
J'ai pourtant installé le framework 4.8, le vcredist-x64 (je n'ai pas pû
trouver la LIBC 10 dont la doc parle)
Merci pour vos conseils
Miembro registrado
962 mensajes
Popularité : +183 (185 votes)
Publicado el 25,octubre 2021 - 18:39
yannick a écrit :
Je suis désolé, je code fonctionne mais je n'y arrive pas avec cette commande de base :
Get-WmiObject -query "SELECT * FROM Win32_diskdrive"

Je veux récupérer "Model", "Size" et "DeviceID"

Il me faut plusieurs modèles pour comprendre et adapter les futurs codes avec Get-WmiObject
Merci

Exemple pour DeviceID
Trace("la valeur de la propriété DeviceID est : ",objDisque.Properties.get_Item("DeviceID").Value)


--
Ami calmant, J.P
Miembro registrado
962 mensajes
Popularité : +183 (185 votes)
Publicado el 25,octubre 2021 - 18:42
Philippe a écrit :
Le 25/10/2021 à 08:43, Jurassic Pork a écrit :
hello,
System.management est un assemblage dotnet   --> Atelier/dotnet/ajouter
un assemblage

--
Ami calmant, J.P


Bonjour,
Je suis intéressé par ce code, mais je ne trouve pas le moyen d'utiliser
un assemblage dotnet.
Je ne trouve pas le menu Atelier/dotnet/ajouter
J'ai essayé Projet/Importer/Un assemblage .net sans succès : j'ai
l'erreur "Le chargement de la DLL wd260net4.dll a échoué", code 3690001
J'ai pourtant installé le framework 4.8, le vcredist-x64 (je n'ai pas pû
trouver la LIBC 10 dont la doc parle)
Merci pour vos conseils


c'est normal que tu ne trouves pas Atelier/dotnet/ajouter un assemblage dotnet ----> Cela a bien changé depuis ma version qui est la 16.
Désoler mais pour la version 26 je ne peux pas t'aider.
Publicado el 25,octubre 2021 - 19:39
Merci pour votre aide. Mais pouvez-vous réellement tester avec Get-WmiObject -query "SELECT * FROM Win32_diskdrive" ?
Je veux récupérer "Model", "Size" et "DeviceID"
Votre réponse ne fonctionne pas.

objDisque est un objet ManagementObject dynamique
prop est une PropertyData dynamique
MaRechercheWMI est un ManagementObjectSearcher("SELECT * FROM Win32_diskdrive")
ColDisques est un ManagementObjectCollection dynamique = MaRechercheWMI.Get()
Trace("=========================================")
POUR TOUT objDisque DE ColDisques
POUR TOUTE prop DE objDisque.Properties
SI prop.Value <> Null ALORS Trace(prop.Name, " : ",prop.Value )
FIN
Trace("la valeur de la propriété DeviceID est : ",objDisque.Properties.get_Item("DeviceID").Value)
FIN

Je veux apprendre l'utilisation de WMI dans Windev, il me faut des exemples complets. Merci à vous et pour votre temps.
Miembro registrado
962 mensajes
Popularité : +183 (185 votes)
Publicado el 26,octubre 2021 - 08:09
hello,
yannick a écrit :
Merci pour votre aide. Mais pouvez-vous réellement tester avec Get-WmiObject -query "SELECT * FROM Win32_diskdrive" ?
Je veux récupérer "Model", "Size" et "DeviceID"
Votre réponse ne fonctionne pas.


hello,
j'ai vu pourquoi le code plantait avec Win32_diskdrive.
Il y a certaines propriétés lues qui sont des tableaux et windev n'aime pas trop que l'on fasse un Trace sur un tableau directement.
La solution consiste à tester le type de variable renvoyé et si c'est un tableau, balayer le tableau.
De plus le plantage était sévère puisqu'il arrêtait l'exécution de l'application. On rajoute un QUAND EXCEPTION pour éviter cela.
Voici le nouveau code :
objDisque est un objet ManagementObject dynamique
prop est une PropertyData dynamique
MaRechercheWMI est un ManagementObjectSearcher("SELECT * FROM Win32_diskdrive")
ColDisques est un ManagementObjectCollection dynamique = MaRechercheWMI.Get()
Trace("=========================================")
QUAND EXCEPTIONEXCEPTION DANS
POUR TOUT objDisque de ColDisques
POUR TOUTE prop de objDisque.Properties
SI prop.Value <> Null ALORS
SI TypeVar(prop.Value) = wlTableau ALORS
Trace(prop.Name, " : ")
POUR TOUT elem de prop.Value
Trace(elem)
FIN
SINON
Trace(prop.Name, " : ",prop.Value )
FIN
FIN
FIN
Trace("===============================================================")
FIN
FAIRE
Trace("Erreur WMI : ",ErreurInfo())
FIN


et pour ton cas de figure oû l'on a besoin de récupérer que trois propriétés :
objDisque est un objet ManagementObject dynamique
prop est une PropertyData dynamique
MaRechercheWMI est un ManagementObjectSearcher("SELECT * FROM Win32_diskdrive")
ColDisques est un ManagementObjectCollection dynamique = MaRechercheWMI.Get()
QUAND EXCEPTIONEXCEPTION DANS
POUR TOUT objDisque de ColDisques
prop = objDisque.Properties.get_Item("Model")
SI prop.Value <> Null ALORS Trace(prop.Name, " : ",prop.Value )
prop = objDisque.Properties.get_Item("Size")
SI prop.Value <> Null ALORS Trace(prop.Name, " : ",prop.Value )
prop = objDisque.Properties.get_Item("DeviceId")
SI prop.Value <> Null ALORS Trace(prop.Name, " : ",prop.Value )
Trace("=========================================")
FIN
FAIRE
Trace("Erreur WMI : ",ErreurInfo())
FIN


A noter que pour accélérer la requête au lieu d'aller chercher toutes les propriétés par * on peut ne demander que les propriétés nécessaires. Exemple :
MaRechercheWMI est un ManagementObjectSearcher("SELECT Model, Size, DeviceId FROM Win32_diskdrive")


--
Ami calmant, J.P
Publicado el 26,octubre 2021 - 08:20
Le 25/10/2021 à 16:42, Jurassic Pork a écrit :
Philippe a écrit :
Le 25/10/2021 à 08:43, Jurassic Pork a écrit :
hello,
System.management est un assemblage dotnet   --> Atelier/dotnet/ajouter
un assemblage

--
Ami calmant, J.P


Bonjour,
Je suis intéressé par ce code, mais je ne trouve pas le moyen d'utiliser
un assemblage dotnet.
Je ne trouve pas le menu Atelier/dotnet/ajouter
J'ai essayé Projet/Importer/Un assemblage .net sans succès : j'ai
l'erreur "Le chargement de la DLL wd260net4.dll a échoué", code 3690001
J'ai pourtant installé le framework 4.8, le vcredist-x64 (je n'ai pas pû
trouver la LIBC 10 dont la doc parle)
Merci pour vos conseils

c'est normal que tu ne trouves pas Atelier/dotnet/ajouter un assemblage
dotnet ----> Cela a bien changé depuis ma version qui est la 16. Désoler
mais pour la version 26 je ne peux pas t'aider.


Merci quand même !!
Miembro registrado
962 mensajes
Popularité : +183 (185 votes)
Publicado el 26,octubre 2021 - 09:10
hello,
Philippe a écrit :
> l'erreur "Le chargement de la DLL wd260net4.dll a échoué", code 3690001
j'ai téléchargé le framework windev 26 et avec l'outil depencywalker j'ai regardé les dépendances de la dll wd260net4.dll. En particulier il y a
MSVCR100.dll
MSVCR100.dll = Visual C++ 2010 Runtime

--
Ami calmant, J.P
Miembro registrado
962 mensajes
Popularité : +183 (185 votes)
Publicado el 26,octubre 2021 - 09:16
complément :
*j'ai téléchargé le framework windev 26 et avec l'outil dependencywalker
2 - tu utilises la version 32 bits de wd260net4 il faut télécharger le vc 32 bits

--
Ami calmant, J.P
Publicado el 26,octubre 2021 - 16:07
Le 26/10/2021 à 07:16, Jurassic Pork a écrit :
complément : *j'ai téléchargé le framework windev 26 et avec l'outil
dependencywalker 2 - tu utilises la version 32 bits de wd260net4 il
faut télécharger le vc 32 bits

-- Ami calmant, J.P


Ca fonctionne beaucoup mieux :-).

Mais j'ai une erreur " 'get_Item' est inconnu pour cet élément. "
sur la ligne : Trace("la valeur de la propriété DeviceID
est:",objDisque.Properties.get_Item("DeviceID").Value)

System.Management
Version=4.0.0.0
Culture=neutral
PublicKeyToken=b03f5f7f11d50a3a

Encore merci.
Miembro registrado
962 mensajes
Popularité : +183 (185 votes)
Publicado el 26,octubre 2021 - 17:00
Philippe a écrit :
Ca fonctionne beaucoup mieux .

Mais j'ai une erreur " 'get_Item' est inconnu pour cet élément. "
sur la ligne : Trace("la valeur de la propriété DeviceID
est:",objDisque.Properties.get_Item("DeviceID").Value)


avec mon code ? si oui quel est ton O.S ? si non peux-tu montrer ton code ?

--
Ami calmant, J.P
Publicado el 26,octubre 2021 - 17:40
Le 26/10/2021 à 15:00, Jurassic Pork a écrit :
Philippe a écrit :
Ca fonctionne beaucoup mieux .

Mais j'ai une erreur " 'get_Item' est inconnu pour cet élément. "
sur la ligne : Trace("la valeur de la propriété DeviceID
est:",objDisque.Properties.get_Item("DeviceID").Value)

avec mon code ? si oui quel est ton O.S ? si non peux-tu montrer ton
code ?

-- Ami calmant, J.P


Oui avec ton code, copié/collé sans modif ; tout est ok, sauf "get_item".
OS Win 10 pro.

J'ai importé le system.management depuis le répertoire :
C:\Windows\WinSxS\amd64_system.management_b03f5f7f11d50a3a_4.0.15805.0_none_7a3afbf1f7955d9b\System.Management.dll
Miembro registrado
962 mensajes
Popularité : +183 (185 votes)
Publicado el 26,octubre 2021 - 17:59
lequel de code ?
et avec le premier code du message #13 que se passe-t-il ?

--
Ami calmant, J.P
Publicado el 26,octubre 2021 - 18:03
Le 26/10/2021 à 15:59, Jurassic Pork a écrit :
lequel de code ? et avec le premier code du message #13 que se passe-t-il ?

--
Ami calmant, J.P


J'avais fait l'essai aussi : problème identique "get_item" non reconnu !
Publicado el 26,octubre 2021 - 18:07
Le 26/10/2021 à 15:59, Jurassic Pork a écrit :
lequel de code ? et avec le premier code du message #13 que se passe-t-il ?

--
Ami calmant, J.P


oupos désolé, je n'avais pas testé le 1er code.
Et, en effet, ce 1er code fonctionne parfaitement :-)
Publicado el 26,octubre 2021 - 18:15
Le 26/10/2021 à 15:59, Jurassic Pork a écrit :
lequel de code ? et avec le premier code du message #13 que se passe-t-il ?

--
Ami calmant, J.P


Précision: l'erreur "'get_item' est inconnu pour cet élément" est un
erreur à la compilation (et non pas en exécution).
Publicado el 26,octubre 2021 - 18:44
Le 26/10/2021 à 15:59, Jurassic Pork a écrit :
lequel de code ? et avec le premier code du message #13 que se passe-t-il ?

--
Ami calmant, J.P


En remplaçant la ligne incriminée : Trace("la valeur de la propriété
DeviceID est : ",objDisque.Properties.get_Item("DeviceID").Value)

par : Trace("la valeur de la propriété DeviceID est :
",objDisque.get_Item("DeviceID"))

tout rentre dans l'ordre :-) :-) et la valeur est bien affichée (j'ai
effectué des recherches sur d'autres item - comme "MediaType" - avec succès
)


J.P, encore un grand merci pour ce code
Miembro registrado
962 mensajes
Popularité : +183 (185 votes)
Publicado el 27,octubre 2021 - 08:12
hello,
il y a une erreur dans mes différents derniers codes. J'utilise ErreurInfo alors que c'est ExceptionInfo qu'il faut utiliser.
De plus j'ai essayé de voir le problème à Philippe concernant get_item et je me suis aperçu que chez moi (se méfier de la version de windev) en mettant un get_item sur objDisque au lieu d'objDisque.Properties j'obtenais directement la valeur de la propriété (en String). Pour éviter de tester la valeur Null , j'utilise pour récupérer la valeur de la propriété un variant, comme cela si c'est Null cela me met un zéro et cela ne fait pas planter le Trace.
Voici les différents nouveaux codes :
1 - Code pour balayer l'ensemble d'une classe WMI et afficher les noms et les valeurs des propriétés :
// J.P Octobre 2021
objDisque est un objet ManagementObject dynamique
prop est une PropertyData dynamique
propname est un Variant
MaRechercheWMI est un ManagementObjectSearcher("SELECT * FROM Win32_diskdrive")
ColDisques est un ManagementObjectCollection dynamique = MaRechercheWMI.Get()
QUAND EXCEPTION DANS
POUR TOUT objDisque DE ColDisques
POUR TOUTE prop DE objDisque.Properties
propname = prop.NAME
SI prop.Value <> NULL ALORS
SI TypeVar(prop.Value) = wlTableau ALORS
Trace(prop.NAME, " : ")
POUR TOUT elem DE prop.Value
Trace(" ",elem)
FIN
SINON
Trace(propname, " : ",prop.Value )
FIN
SINON
Trace(propname)
FIN
FIN
Trace("===============================================================")
FIN
FAIRE
Trace("Erreur WMI : ",ExceptionInfo())
FIN


2 - Code pour récupérer certaines propriétés d'une classe WMI :
// J.P Octobre 2021
objDisque est un objet ManagementObject dynamique
prop est un Variant
MaRechercheWMI est un ManagementObjectSearcher("SELECT Model, Size, DeviceId FROM Win32_diskdrive")
ColDisques est un ManagementObjectCollection dynamique = MaRechercheWMI.Get()
Trace("=========================================")
QUAND EXCEPTION DANS
POUR TOUT objDisque DE ColDisques
prop = objDisque.get_Item("Model")
Trace("InstallDate ", " : ",prop )
prop = objDisque.get_Item("Size")
Trace("Size ", " : ",prop )
prop = objDisque.get_Item("DeviceId")
Trace("DeviceId ", " : ",prop )
Trace("=========================================")
FIN
FAIRE
Trace("Erreur WMI : ",ExceptionInfo())
FIN


--
Ami calmant, J.P
Publicado el 27,octubre 2021 - 15:45
PARFAIT !
Merci.
Il me reste juste une chose à comprendre.
Le code est prévu seulement pour "Get-WmiObject" les objets Wmi.
Mais si je veux travailler avec autre chose comme : "Get-CimInstance -ClassName Win32_OperatingSystem | Select CSName, LastBootUpTime"

Je ne pourrai surement pas tout faire avec Windev. Quoique ?
Mais, sans vouloir abuser, le profite de votre connaissance pour moi-même apprendre.
Merci
Yannick
Publicado el 28,octubre 2021 - 17:39
Le code donné fonctionne très bien. J'ai compris son usage mais pas pour d'autres Get-xxxxxx.
MAIS, il faut .NET 4 soit installé, c'est le cas pour Windows 10 pas de problème.
Et aussi Visual C++ 2010 x64 Redistribuable.

Donc deux solutions pour les postes non équipés par avance :
- Faire une vérification de la présente de Visual et sinon l'installer.
- L'autre solution sera de ne pas utiliser le code donné, mais autre chose qui me donne la même information mais sans tous ces compléments à installer.
Par exemple une commande Powershell. Je sais faire et je l'utilise déjà. Mais c'est lourd et parfois Powershell est en panne sur une machine.
Je pense donc aux API Windows. Comment trouver la même chose que ce code avec les API ?

objDisque est un objet ManagementObject dynamique
prop est un Variant
MaRechercheWMI est un ManagementObjectSearcher("SELECT Model, DeviceId FROM Win32_diskdrive")
ColDisques est un ManagementObjectCollection dynamique = MaRechercheWMI.Get()
//Trace("=========================================")
QUAND EXCEPTION DANS
POUR TOUT objDisque DE ColDisques
prop = objDisque.get_Item("Model")
ExtractModel = prop
prop = objDisque.get_Item("DeviceId")
ExtractDeviceId = prop
ChaineFinale = ChaineFinale + ExtractDeviceId +" - "+ ExtractModel +RC
FIN
FAIRE
//Pour ne pas avoir de plantage en cas d'exception pendant la procédure, utilise ici les méthodes fournies par le .NET Framework
FIN

J'aimerai un avis, ou plusieurs avis, sur la question. C'est peut être pas un problème d'utiliser le code ci-dessus car plus simple que les API ?
Sachant que je ne m'arrête pas à ces informations à remonter. Je vais en avoir bien plus du code de ce type si je choisi le WMI.
Merci
Publicado el 01,noviembre 2021 - 13:03
Bonjour.
Je sais, je vous ennuis surement. Mais je suis a font dans les WMI avec Windev.
J'arrive à faire fonctionner certaines commandes mais pas d'autres.
J'aimerai avoir une réponse à ma publication du 28/10/2021 et sur celle-ci aussi.

Comment traduire en Wlangage cette simple commande ? : (winmgmts:\\.\root\default:SystemRestore').enable('C:')
Ici pas besoin d'une boucle, il faut seulement exécuter la commande.
Mais je n'y arrive pas. Je ne sais .
objDisque est un objet ManagementObject dynamique
MaRechercheWMI est un ManagementObjectSearcher("root\default","SystemRestore.enable('C:')")//("'(winmgmts:\\.\root\default:SystemRestore').enable('C:')")
ColDisques est un ManagementObjectCollection dynamique = MaRechercheWMI.Get()

Merci une nouvelle fois.
Miembro registrado
962 mensajes
Popularité : +183 (185 votes)
Publicado el 02,noviembre 2021 - 07:41
hello,
pour utiliser le WMI sous Windev on peut aussi employer l'objet COM WbemScripting.SWbemLocator. Celui-ci est présent dans Windows depuis Windows Vista, Windows server 2008.

Voici un code équivalent à ce qui a été fait dans les messages précédents :
objLocator est un objet automation "WbemScripting.SWbemLocator"
objService est un objet automation dynamique
Resultats est un objet automation dynamique
x est un entier
UnRésultat est une chaîne

QUAND EXCEPTIONEXCEPTION DANS
objService = objLocator>>ConnectServer(".", "\root\cimv2")
objService>>Security_>>ImpersonationLevel = 3
Resultats = objService>>ExecQuery("SELECT Model, Size, DeviceID FROM Win32_diskdrive")

POUR x = 0 _A_ Resultats>>Count -1
UnRésultat = Resultats>>ItemIndex(x)>>Properties_>>Item("Model")>>Value
SI UnRésultat <> "" ALORS Trace(UnRésultat)
UnRésultat = Resultats>>ItemIndex(x)>>Properties_>>Item("Size")>>Value
SI UnRésultat <> "" ALORS Trace(UnRésultat)
UnRésultat = Resultats>>ItemIndex(x)>>Properties_>>Item("DeviceID")>>Value
SI UnRésultat <> "" ALORS Trace(UnRésultat)
FIN
FAIRE
Erreur("Erreur WMI : " + ExceptionInfo())
FIN


--
Ami calmant, J.P
Publicado el 03,noviembre 2021 - 09:00
Merci
C'est quoi le mieux alors ?
Utiliser les objets COM plus ancien au rique peut être d'être retiré par Microsoft prochainement ?
(Je ne sais pas c'est une supposition de ma part)
Ou WMI en installant Visual C++ .NET 2010 sur les postes si non installé ? (Pour cette solution, j'ai trouvé et .NET 2010 s'install tout seul si nécessaire.
Et côté performance, fiabilité, compatibilité ?

Merci
Publicado el 21,noviembre 2021 - 14:42
Bonjour J.P

Je n'arrive pas à convertir ceci pour Windev :
"Get-CimInstance -ClassName Win32_OperatingSystem | Select CSName, LastBootUpTime"

ou cela :
Get-WmiObject win32_operatingsystem | select @{LABEL=LastBootUpTime;EXPRESSION={$_.ConverttoDateTime($_.lastbootuptime)}}

L'idéal, J.P, serait de me donner la conversion pour les deux codes. Cala m'aidera à peut être comprendre et faire moi-même ensuite.
Merci J.P !
Miembro registrado
351 mensajes
Popularité : +75 (75 votes)
Publicado el 26,noviembre 2021 - 13:04
Bonjour Yannick,

Pourquoi utiliser une usine à gaz alors que 2 lignes très simples te donneront directement le résultat dans un format DateHeure ?

// Calcul de la durée de l'uptime
Tick est une Durée = API("KERNEL32","GetTickCount")
Uptime est une DateHeure = DateHeureSys() - Tick

// Affichage
Trace( DateVersChaîne(Uptime,"Jjjj J Mmmm AAAA HHhmm:SS") )


--
Bon développement, Patrick [3po.fr]
Miembro registrado
351 mensajes
Popularité : +75 (75 votes)
Publicado el 26,noviembre 2021 - 13:10
Et si tes machines tournent plus de 49,7 jours ... alors remplace "GetTickCount" par "GetTickCount64".
Tu peux l'utiliser tout le temps et corriger le code en :
// Calcul de la durée de l'uptime
Tick est une Durée = API("KERNEL32","GetTickCount64")
Uptime est une DateHeure = DateHeureSys() - Tick

// Affichage
Trace( DateVersChaîne(Uptime,"Jjjj J Mmmm AAAA HHhmm:SS") )


--
Bon développement, Patrick [3po.fr]
Publicado el 01,diciembre 2021 - 17:04
Désolé, je n'ai pas eu l'occasion de venir sur le forum ces derniers jours.
Merci pour l'exemple.
Et si je veux extraire la date exacte du jour du redémarrage ?
-------------------------------
Autre demande :
Dans mon programme actuellement, j'utilise beaucoup de Powershell.
Cela fonctionne très bien, mais un peu long dans le traitement sans compter que parfois certaines machines (très minoritaires) ne lancent plus les commandes à cause d'un parasite.
La solution est de passer par des commandes WMI-Object et l'idéale par des API.
Par exemple, j'utilise une commande Powershell pour récupérer l'IP WAN. Cela m'évite des lignes d'écritures et d'analyse du résultat pour récupérer l'IP.
Y a-t-il une solution en API ou en WMI ?

Ceci n'est qu'un exemple. J'ai beaucoup de commande Powershell.
Publicado el 01,diciembre 2021 - 17:07
Get-WmiObject win32_operatingsystem | select @{LABEL=LastBootUpTime;EXPRESSION={$_.ConverttoDateTime($_.lastbootuptime)}}

Ceci est une commande WMI Ogject qui ne donne la date exacte du dernier redémarrage.
Mais je n'arrive pas à l'intégrer dans Windev et peut être qu'il y a plus simple et aussi efficace en faisant autrement.
Merci pour votre aide et votre temps.
Miembro registrado
351 mensajes
Popularité : +75 (75 votes)
Publicado el 02,diciembre 2021 - 17:15
Bonjour Yannick,

Tu redemandes exactement la même chose ... la réponse est donc exactement le même code que j'ai posté le 26 novembre 2021 à 13:10.

Pour extraire la date ... c'est déjà dans le code ! C'est à se demander si tu as essayé le code fourni ?

A ta question concernant les API, la réponse est oui, tu peux tout récupérer via les API mais cela peut être parfois assez compliqué et je doute que tu y arrives à la vue de tes interrogations, désolé d'être un peu direct.

Et si tes machines ont un parasite ... donnent leurs un vermifuge ! :)

--
Bon développement, Patrick [3po.fr]
Publicado el 13,marzo 2024 - 18:09
Bonjour.
Autre sujet mais toujours du WMI.

J'arrive à comprendre le WMI mais ce n'est pas encore évident.
Voici mon code :
objLocator est un objet automation "WbemScripting.SWbemLocator"
objService est un objet automation dynamique
Resultats est un objet automation dynamique
x est un entier
UnRésultat est une chaîne
UnRésultat2 est une chaîne
UnRésultat3 est une chaîne

QUAND EXCEPTIONEXCEPTION DANS
objService = objLocator>>ConnectServer(".", "root\Microsoft\Windows\Storage\Providers_v2")
objService>>Security_>>ImpersonationLevel = 3
Resultats = objService>>ExecQuery("SELECT * FROM MSFT_StorageReliabilityCounter") //SPACES_StorageReliabilityCounter")

//WMI.Query(root\microsoft\windows\storage,SELECT * FROM MSFT_StorageReliabilityCounter where '(DeviceId=0) AND (ObjectID like "%reliabilitycounter")',ReadErrorsTotal)
POUR x = 0 _À_ Resultats>>Count -1
UnRésultat = Resultats>>ItemIndex(x)>>Properties_>>Item("ReadLatencyMax")>>Value
////// //SI UnRésultat <> "" ALORS Trace(UnRésultat)
UnRésultat2 = Resultats>>ItemIndex(x)>>Properties_>>Item("ReadErrorsTotal")>>Value
////// //SI UnRésultat <> "" ALORS Trace(UnRésultat)
UnRésultat3 = Resultats>>ItemIndex(x)>>Properties_>>Item("FlushLatencyMax")>>Value
////// //SI UnRésultat <> "" ALORS Trace(UnRésultat)
Trace("====================================================")
Trace(UnRésultat," ",UnRésultat2," ",UnRésultat3)
FIN
FAIRE
Erreur("Erreur WMI : " + ExceptionInfo())
FIN

Trace(UnRésultat," ",UnRésultat2," ",UnRésultat3)

La dernière ligne est la pour confirmé qu'il ne se passe rien.
Il n'y a pas d'erreur dans l’exécution.
Mais aucune information alors que je devrais avoir :
FlushLatencyMax : 49
ReadErrorsTotal : Rien, heureusement.
ReadLatencyMax : 3899
J'obtien ces informations avec la commande suivant :
Get-Disk | Get-StorageReliabilityCounter | Select-object -Property "*"

Si j'utilise que :
Get-Disk | Get-StorageReliabilityCounter

Je n'ai pas toutes les variables.
Merci encore pour votre aide.
Publicado el 13,marzo 2024 - 18:14
Correction :
objLocator est un objet automation "WbemScripting.SWbemLocator"
objService est un objet automation dynamique
Resultats est un objet automation dynamique
x est un entier
UnRésultat est une chaîne
UnRésultat2 est une chaîne
UnRésultat3 est une chaîne

QUAND EXCEPTIONEXCEPTION DANS
objService = objLocator>>ConnectServer(".", "root\Microsoft\Windows\Storage")
objService>>Security_>>ImpersonationLevel = 3
Resultats = objService>>ExecQuery("SELECT * FROM MSFT_StorageReliabilityCounter") //SPACES_StorageReliabilityCounter")

//WMI.Query(root\microsoft\windows\storage,SELECT * FROM MSFT_StorageReliabilityCounter where '(DeviceId=0) AND (ObjectID like "%reliabilitycounter")',ReadErrorsTotal)
POUR x = 0 _À_ Resultats>>Count -1
UnRésultat = Resultats>>ItemIndex(x)>>Properties_>>Item("ReadErrorsTotal")>>Value
////// //SI UnRésultat <> "" ALORS Trace(UnRésultat)
UnRésultat2 = Resultats>>ItemIndex(x)>>Properties_>>Item("ReadErrorsTotal")>>Value
////// //SI UnRésultat <> "" ALORS Trace(UnRésultat)
UnRésultat3 = Resultats>>ItemIndex(x)>>Properties_>>Item("FlushLatencyMax")>>Value
////// //SI UnRésultat <> "" ALORS Trace(UnRésultat)
Trace("====================================================")
Trace(UnRésultat," ",UnRésultat2," ",UnRésultat3)
FIN
FAIRE
Erreur("Erreur WMI : " + ExceptionInfo())
FIN

Trace(UnRésultat," ",UnRésultat2," ",UnRésultat3)