[VB .NET] WMI et les array

Résolu
adnotlegland Messages postés 53 Date d'inscription vendredi 7 octobre 2005 Statut Membre Dernière intervention 9 avril 2008 - 4 mars 2006 à 16:49
quentincabo Messages postés 34 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 26 mars 2008 - 14 févr. 2008 à 11:17
Bonjour a tous,

quelqu'un pourrait-il me donner un bout de code pour recuperer une adresse ip (par exemple) par les wmi ??
Mon probleme c'est que la valeur renvoyé est une system.string[] et que je n'arrive pas à la recuperer
ex:

Dim Ms As New ManagementScope("\root\cimV2")
Dim Requete As New ObjectQuery("SELECT * FROM win32_networkadapterconfiguration")
Dim recherche As New ManagementObjectSearcher(Ms, Requete)

Ms.Connect()

Dim col As ManagementObjectCollection = recherche.Get
If Ms.IsConnected Then
For Each obj As ManagementObject In col
For Each propriete As PropertyData In obj.Properties
If Not propriete.Value Is Nothing Then RichTextBox1.Text +propriete.Name + " " + propriete.Value.ToString + ControlChars.CrLf
End If
Next
Next

End If

et là toutes les valeurs contenu dans des array affichent system.string[] mais pour les autres ca marche niquel !!!

Merci pour le coup de main

9 réponses

adnotlegland Messages postés 53 Date d'inscription vendredi 7 octobre 2005 Statut Membre Dernière intervention 9 avril 2008
4 mars 2006 à 18:47
A force de tatonner j'avais trouver un bout de code du style (pour reprendre ton exemple) :

Dim mos
As

New
ManagementObjectSearcher(
"select ipaddress from win32_networkadapterconfiguration where index = 1"
)

Dim
monIP() As

String
Dim
sIp
As

String

For
Each
mo
As
ManagementObject
In
mos.Get
For each propriete as propertydata in mo.properties
monIP = propriete.value

Next
Next

mos.Dispose() //question : pourquoi le detruire ??


sIp = monIP(0).tostring

qu'en penses tu ??
3
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
4 mars 2006 à 18:35
'Lut,
C'est normal que tu obtiennes ce résultat, la propriété IpAddress renvoie un tableau et non un string.

Voici un exemple avec managment, adapte selon ton besoin avec ta richtextbox.



Dim mos
As

New
ManagementObjectSearcher(
"select ipaddress from win32_networkadapterconfiguration"
)

Dim
monIP() As

String
Dim
sIp
As

String

For
Each
mo
As
ManagementObject
In
mos.Get
monIP = mo("ipaddress"
)
Next

mos.Dispose()



For i
As

Integer
= 0
To
monIP.Length - 1
sIp += monIP(i) & "."
Next

sIp = sIp.Remove(sIp.Length - 1)

Si est sous vb2005 ceci doit marcher
dim IP as sting = system.Net.Dns.GetHostEntry(Net.Dns.GetHostName).AddressList.GetValue(0).ToString
0
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
4 mars 2006 à 19:06
sa me parait correct.
on ne détruit pas l'objet mos ! on libère simplement les ressources utilisées par celui-ci. après c'est au GarbageCollector de faire son travail....
0
troxsa Messages postés 553 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 2 octobre 2016 1
4 mars 2006 à 19:25
Pour recuperer l'adresse IP voila comment je fait
'Example en Wmi
imports System
imports System.Management

<hr size="2" width="100%">Module Module1
Public Shared Sub Main()
Dim query as ManagementObjectSearcher = new _
ManagementObjectSearcher("SELECT * FROM
WIN32_NetworkAdapterConfiguration WHERE IPEnabled = 'TRUE'")
Dim queryCollection as ManagementObjectCollection = query.Get()
Dim mo as ManagementObject
For Each mo In queryCollection
Dim addresses() as string = CType(mo("IPAddress"), string())
Dim defaultgateways() as string = CType(mo("DefaultIPGateway"),
string())


Console.WriteLine("Network Card: {0}", mo("Description"))
Console.WriteLine(" MAC Address: {0}", mo("MACAddress"))


Dim ipaddress as string
For Each ipaddress In addresses
Console.WriteLine(" IP Address: {0}", ipaddress)
Next


Dim gateway as string
For Each gateway In defaultgateways
Console.WriteLine(" Gateway: {0}", gateway)
Next
Next
End Sub
End Module
<hr size="2" width="100%">Encore une autre methode plus courte,
<hr size="2" width="100%"> Dim varHostEntry As System.Net.IPHostEntry
varHostEntry = System.Net.Dns.GetHostByName(System.Net.Dns.GetHostName())
Dim varAnAddress As System.Net.IPAddress

For Each varAnAddress In varHostEntry.AddressList
MsgBox(varAnAddress.ToString())
Next

<hr size="2" width="100%">Pour un reseau local je fait autrement,

Imports System.Net


Public Function ListeAdressesIP() As String
Dim strListe As String
Dim objAdresse As Net.IPAddress
Dim objHote As Net.IPHostEntry

objHote = Dns.Resolve(Dns.GetHostByName("LocalHost").HostName)
For Each objAdresse In objHote.AddressList() strListe IIf(strListe "", "", strListe & "#") & objAdresse.ToString()
Next
Return strListe
End Function

Voila j'espere que tu auras le choix
http://www.troxsa.info/Code VB.net
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
adnotlegland Messages postés 53 Date d'inscription vendredi 7 octobre 2005 Statut Membre Dernière intervention 9 avril 2008
5 mars 2006 à 06:26
Merci Willi, et merci Troxsa pour l'astuce avec system.net ca peut aussi etre utile. Il est bien ce petit forum
0
cs_gastonfinger Messages postés 8 Date d'inscription mardi 3 mai 2005 Statut Membre Dernière intervention 20 octobre 2008
30 avril 2006 à 12:36
Bonjour Je suis sur un logiciel de gestion de trafic sur un grand réseau
j'aimerai utilié le wmi pour ramener toutes les informations (équipement ) de ce reseau
mais je n'ai jamais utilisé le wmi!!!
     merci de l'aide
0
troxsa Messages postés 553 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 2 octobre 2016 1
30 avril 2006 à 13:13
salut gastonfinger  je serais toi je ferais un nouveau topic !
et pour repondre a moitier a ta question : sur mon site il y a des exemples

http://www.troxsa.info/
Code Vb.net 
0
guillaume_2k3 Messages postés 1 Date d'inscription jeudi 16 mars 2006 Statut Membre Dernière intervention 31 janvier 2007
31 janv. 2007 à 09:42
Bonjour  à tous,

Je débute en VB, je ne suis pas développeur et je cherche à faire un script VB qui change la passerelle des machines de mon parc à distance.

J'utilise WMI avec VB mais dès que je met du "code wmi" il n'est pas reconnu dans VB.
quand je copie-colle vos sources dans vb 2005 express, les noms de classe sont soulignés et j'ai des erreurs style
Erreur    3    Type 'ManagementScope' non défini.   

je suppose qu'il faut importer une classe, mais je ne sais pas comment procéder en VB ni quelle classe importer.

merci de votre aide...
0
quentincabo Messages postés 34 Date d'inscription vendredi 10 mars 2006 Statut Membre Dernière intervention 26 mars 2008
14 févr. 2008 à 11:17
as-tu ajouter le composant system.management dans les options du Visual Studio 2005???
0
Rejoignez-nous