Gestion de Parc avec WMI et C#

palya Messages postés 12 Date d'inscription mardi 24 mai 2005 Statut Membre Dernière intervention 21 février 2006 - 11 janv. 2006 à 15:38
palya Messages postés 12 Date d'inscription mardi 24 mai 2005 Statut Membre Dernière intervention 21 février 2006 - 13 janv. 2006 à 20:22
Bonjour à tous!
Je dois développer un logiciel de gestion de parc pour une société assez importante qui désire etre alertée des qu'un materiel a un pb (Ex: a quel moment un disque dur va lacher), répertorier les ordis par service... .
Je voudrais savoir sur quoi se baser, avec WMI, pour connaître l'état d'un matériel:
on doit se baser sur Aviability, statut ou sur ConfigManagerErrorCode ?
Merci d'avance!

6 réponses

TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
11 janv. 2006 à 23:41
Base toi sur l'ensemble des éléments, uniquement ces deux informations ne te seront pas utiles :

exe :

Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_IDEController",,48)
For Each objItem in colItems
Wscript.Echo "Availability: " & objItem.Availability
Wscript.Echo "Caption: " & objItem.Caption
Wscript.Echo "ConfigManagerErrorCode: " & objItem.ConfigManagerErrorCode
Wscript.Echo "ConfigManagerUserConfig: " & objItem.ConfigManagerUserConfig
Wscript.Echo "CreationClassName: " & objItem.CreationClassName
Wscript.Echo "Description: " & objItem.Description
Wscript.Echo "DeviceID: " & objItem.DeviceID
Wscript.Echo "ErrorCleared: " & objItem.ErrorCleared
Wscript.Echo "ErrorDescription: " & objItem.ErrorDescription
Wscript.Echo "InstallDate: " & objItem.InstallDate
Wscript.Echo "LastErrorCode: " & objItem.LastErrorCode
Wscript.Echo "Manufacturer: " & objItem.Manufacturer
Wscript.Echo "MaxNumberControlled: " & objItem.MaxNumberControlled
Wscript.Echo "Name: " & objItem.Name
Wscript.Echo "PNPDeviceID: " & objItem.PNPDeviceID
Wscript.Echo "PowerManagementCapabilities: " & objItem.PowerManagementCapabilities
Wscript.Echo "PowerManagementSupported: " & objItem.PowerManagementSupported
Wscript.Echo "ProtocolSupported: " & objItem.ProtocolSupported
Wscript.Echo "Status: " & objItem.Status
Wscript.Echo "StatusInfo: " & objItem.StatusInfo
Wscript.Echo "SystemCreationClassName: " & objItem.SystemCreationClassName
Wscript.Echo "SystemName: " & objItem.SystemName
Wscript.Echo "TimeOfLastReset: " & objItem.TimeOfLastReset
Next

::|The S@ib|::
MVP C#.NET
0
palya Messages postés 12 Date d'inscription mardi 24 mai 2005 Statut Membre Dernière intervention 21 février 2006
12 janv. 2006 à 13:57
Merci de ton aide TheSaib!
Par contre, je ne procède pas de la même manière, je fais comme ça:

ConnectionOptions aConnectionOptions
= new ConnectionOptions ();

ManagementScope aManagementScope
= new ManagementScope(@"\\."+ @"", aConnectionOptions
);

System
.Management
.ObjectQuery QueryEvent
= new System
.Management
.ObjectQuery("select * from Win32_DiskDrive ");


ManagementObjectSearcher aManagementObjectSearcher
= new ManagementObjectSearcher(aManagementScope
, QueryEvent
);


ManagementObjectCollection aManagementObjectCollection
= aManagementObjectSearcher
.Get();


foreach(ManagementObject aManagementObject
in aManagementObjectCollection
)


{


foreach (System
.Management
.PropertyData aPropertyData
in aManagementObject
.Properties
)


{


Console.WriteLine(aPropertyData.Name + " : " + num + "");


}
}

Y-a-t'il une différence ou pas?
0
palya Messages postés 12 Date d'inscription mardi 24 mai 2005 Statut Membre Dernière intervention 21 février 2006
12 janv. 2006 à 14:00
Au fait, correspond à :


string num
=System
.Convert
.ToString(aManagementObject
[aPropertyData
.Name
]);
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
12 janv. 2006 à 23:20
Moi c'était du vbscript normal que tu ne procède pas de la même manière.

::|The S@ib|::
MVP C#.NET
0

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

Posez votre question
palya Messages postés 12 Date d'inscription mardi 24 mai 2005 Statut Membre Dernière intervention 21 février 2006
13 janv. 2006 à 13:55
OK!
Par contre, je veux transférer les infos des clients sur le serveur qui les enverra ensuite sur un poste (celui de l'administrateur réseau). J'ai donc l'intention de faire une interface qui affichera le nom de l'utilistaeur, l'adresse IP et le nom du poste qui lui est affecté, le statut , le nb de pb... pour chaque poste. Mais il faut que dès qu'un problème survient au niveau matériel l'admin réseau soit alerte (donc créer des alertes).
Ce que je veux savoir c'est est-ce qu'il est nécessaire de créer une base de données qui enregistre tout? Je pensais enregistrer uniquement les alertes et les problème, les infos seraient affichées directement.
Merci encore pour ton aide.
0
palya Messages postés 12 Date d'inscription mardi 24 mai 2005 Statut Membre Dernière intervention 21 février 2006
13 janv. 2006 à 20:22
Finalement j'ai opté pour une base de données qui enregistrera uniquement les erreurs renvoyer.
J'ai besoin d'effectuer ces requêtes(WMI) "à répétition", j'ai donc créer des threads, mais comment savoir s'ils s'effectuent selon le temps passé en paramètre?
Aussi, dans mon code je veux qu'à chaque requête le client envoi un tableau au serveur ; cependant à chaque requête il me renvoi un client différent. Je poste le code:


public void Start()


{


Socket ClientSocket
= new Socket (AddressFamily
.InterNetwork
, SocketType
.Stream
, ProtocolType
.Tcp
);


Thread TReadOS
;


TReadOS
=new Thread(new ThreadStart(OS
));


TReadOS
.Start();


Thread TReadMotherCard
;


TReadMotherCard
= new Thread (new ThreadStart(MotherCard
));


TReadMotherCard
.Start();


Thread TReadPeriph
;


TReadPeriph
=new Thread(new ThreadStart(Periph
));


TReadPeriph
.Start();


Thread ThreadUser
;


ThreadUser
= new Thread (new ThreadStart(User
));


Thread
.Sleep(10);
}


private void ExecQuery(string classWMI
, Socket ClientSocket
)//, ref ArrayList PropList


{


//Spécification de tous les paramètres requis pour créer une connexion avec la classe ConnectionOptions.


ConnectionOptions aConnectionOptions
= new ConnectionOptions();


//ConnectionOptions.Username = "domain\username";


//ConnectionOptions.Password = "password";


//Utilisation du namespace WMI dans lequel les opérations de gestion vont être effectuées.


ManagementScope aManagementScope
= new ManagementScope (@"\."+ @"", aConnectionOptions
);


//La classe ObjectQuery représente une requête de gestion qui retourne des instances ou des classes


System
.Management
.ObjectQuery aObjectQuery
= new System
.Management
.ObjectQuery("select * from "+classWMI
);


//La classe ManagementObjectSearcher permet d'extraire une collection d'objets de gestion, en fonction de la requête spécifiée lors de son instanciation par le paramètre ObjectQuery ou directement par une string si l'on " code en dur ".


ManagementObjectSearcher aManagementObjectSearcher
= new ManagementObjectSearcher (aManagementScope
, aObjectQuery
);


//ManagementObjectCollection représente différentes collections d'objets de gestion extraits via WMI.


ManagementObjectCollection aManagementObjectCollection
= aManagementObjectSearcher
.Get();


foreach(ManagementObject aManagementObject
in aManagementObjectCollection
)


{


//Ajout d'un retour chariot pour séparer à l'affichage les objets extraits.


//PropertyData représente les informations retournées par la propriété WMI de l'objet extrait par le ManagementObject utilisé.


foreach (System
.Management
.PropertyData aPropertyData
in aManagementObject
.Properties
)


{


string num
= System
.Convert
. ToString (aManagementObject
[aPropertyData
.Name
]);//objet correspondant à la propriété


Console
.WriteLine(aPropertyData
.Name
+ " : " + num
+ "");


PropList
.Add(aPropertyData
.Name
+ " : " + num
);


}


}
//ici je fais ceci mais je sais qu'il crée un nouveau client a chaque requête
//j'ai essayé de créer un parametre de sortie et d'enlever le code suivant pour le mettre dans start()
//mais je n'arrive pas a faire fonctionner mon prog avec le param de sortie


string mess
=PropList
.ToString();


IPAddress ipadr
= IPAddress
. Parse ( "192.168.50.225");


IPEndPoint ipEnd
= new IPEndPoint (ipadr
,8000);


ClientSocket
=new Socket(AddressFamily
.InterNetwork
, SocketType
.Stream
, ProtocolType
.Tcp
);


try


{


ClientSocket
.Connect(ipEnd
);


if(ClientSocket
.Connected
)


{


SendMsg(mess
, ClientSocket
);


}


}


catch(SocketException E
)


{


MessageBox
.Show("Erreur Connection: "+E
.Message
);


}


}

P.S: pour l'instant j'ai un PC de test qui me sert de client et de serveur
0
Rejoignez-nous