| |
Membre enregistré 15 messages |
|
Posté le 23 août 2021 - 12:16 |
Bonjour,
Je suis familiarisé avec PowerShell comment obtenir un équivalent de la commande Get-WmiObject sous WinDev svp ?
Merci |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 962 messages Popularité : +183 (185 votes) |
|
Posté le 23 août 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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 15 messages |
|
Posté le 23 août 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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 874 messages Popularité : +39 (51 votes) |
|
Posté le 23 août 2021 - 20:50 |
Bonsoir Axel, L'exemple et code de @Jurassic Pork est simple et opérationnel
Tu peux t'en inspirer
Bon dev Christian
-- Christian - kick71 |
| |
| |
| | | |
|
| | |
| |
Posté le 24 octobre 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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 962 messages Popularité : +183 (185 votes) |
|
Posté le 25 octobre 2021 - 10:43 |
hello, System.management est un assemblage dotnet --> Atelier/dotnet/ajouter un assemblage
-- Ami calmant, J.P |
| |
| |
| | | |
|
| | |
| |
Posté le 25 octobre 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 |
| |
| |
| | | |
|
| | |
| |
Posté le 25 octobre 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 |
| |
| |
| | | |
|
| | |
| |
Posté le 25 octobre 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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 962 messages Popularité : +183 (185 votes) |
|
Posté le 25 octobre 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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 962 messages Popularité : +183 (185 votes) |
|
Posté le 25 octobre 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. |
| |
| |
| | | |
|
| | |
| |
Posté le 25 octobre 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. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 962 messages Popularité : +183 (185 votes) |
|
Posté le 26 octobre 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 |
| |
| |
| | | |
|
| | |
| |
Posté le 26 octobre 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 !! |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 962 messages Popularité : +183 (185 votes) |
|
Posté le 26 octobre 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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 962 messages Popularité : +183 (185 votes) |
|
Posté le 26 octobre 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 |
| |
| |
| | | |
|
| | |
| |
Posté le 26 octobre 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. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 962 messages Popularité : +183 (185 votes) |
|
Posté le 26 octobre 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 |
| |
| |
| | | |
|
| | |
| |
Posté le 26 octobre 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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 962 messages Popularité : +183 (185 votes) |
|
Posté le 26 octobre 2021 - 17:59 |
lequel de code ? et avec le premier code du message #13 que se passe-t-il ?
-- Ami calmant, J.P |
| |
| |
| | | |
|
| | |
| |
Posté le 26 octobre 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 ! |
| |
| |
| | | |
|
| | |
| |
Posté le 26 octobre 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 |
| |
| |
| | | |
|
| | |
| |
Posté le 26 octobre 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). |
| |
| |
| | | |
|
| | |
| |
Posté le 26 octobre 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 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 962 messages Popularité : +183 (185 votes) |
|
Posté le 27 octobre 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 |
| |
| |
| | | |
|
| | |
| |
Posté le 27 octobre 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 |
| |
| |
| | | |
|
| | |
| |
Posté le 28 octobre 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 |
| |
| |
| | | |
|
| | |
| |
Posté le 01 novembre 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. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 962 messages Popularité : +183 (185 votes) |
|
Posté le 02 novembre 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 |
| |
| |
| | | |
|
| | |
| |
Posté le 03 novembre 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 |
| |
| |
| | | |
|
| | |
| |
Posté le 21 novembre 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 ! |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 351 messages Popularité : +75 (75 votes) |
|
Posté le 26 novembre 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 ?
Tick est une Durée = API("KERNEL32","GetTickCount") Uptime est une DateHeure = DateHeureSys() - Tick
Trace( DateVersChaîne(Uptime,"Jjjj J Mmmm AAAA HHhmm:SS") )
-- Bon développement, Patrick [3po.fr] |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 351 messages Popularité : +75 (75 votes) |
|
Posté le 26 novembre 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 :
Tick est une Durée = API("KERNEL32","GetTickCount64") Uptime est une DateHeure = DateHeureSys() - Tick
Trace( DateVersChaîne(Uptime,"Jjjj J Mmmm AAAA HHhmm:SS") )
-- Bon développement, Patrick [3po.fr] |
| |
| |
| | | |
|
| | |
| |
Posté le 01 décembre 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. |
| |
| |
| | | |
|
| | |
| |
Posté le 01 décembre 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. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 351 messages Popularité : +75 (75 votes) |
|
Posté le 02 décembre 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] |
| |
| |
| | | |
|
| | |
| |
Posté le 13 mars 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")
POUR x = 0 _À_ Resultats>>Count -1 UnRésultat = Resultats>>ItemIndex(x)>>Properties_>>Item("ReadLatencyMax")>>Value UnRésultat2 = Resultats>>ItemIndex(x)>>Properties_>>Item("ReadErrorsTotal")>>Value UnRésultat3 = Resultats>>ItemIndex(x)>>Properties_>>Item("FlushLatencyMax")>>Value 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. |
| |
| |
| | | |
|
| | |
| |
Posté le 13 mars 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")
POUR x = 0 _À_ Resultats>>Count -1 UnRésultat = Resultats>>ItemIndex(x)>>Properties_>>Item("ReadErrorsTotal")>>Value UnRésultat2 = Resultats>>ItemIndex(x)>>Properties_>>Item("ReadErrorsTotal")>>Value UnRésultat3 = Resultats>>ItemIndex(x)>>Properties_>>Item("FlushLatencyMax")>>Value Trace("====================================================") Trace(UnRésultat," ",UnRésultat2," ",UnRésultat3) FIN FAIRE Erreur("Erreur WMI : " + ExceptionInfo()) FIN
Trace(UnRésultat," ",UnRésultat2," ",UnRésultat3) |
| |
| |
| | | |
|
| | |