A voir également:
- [Java]CIM
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Waptrick java voiture - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Eclipse java - Télécharger - Langages
9 réponses
En gros j voudrai savoir si il y a moyen d'utiliser une objet wmi en java...
voila plus de detail sur mes recherches...
J'ai un peu chiné et apparement avec le package javax.Wbem.cim on peut acceder à la CIM cependant je ne l'ai vu que pour solaris donc je me pause les questions suivantes..
est ce que ce package fonctionne sous windows..meme maniere de fonctionner etc..
enfin si cela ne convient pas sous windows quelqu'un à t'il une solution alternative..
j'ai vu egalement sur le net le jacob project qui permet de manipuler des activx mais la le probleme c est que j ai pas assez de doc pour savoir comment manipuler les methodes pour faire ma requete sur la CIM...
Bon apparement avec jacob j arrive a creeer l activx coresondant a l objet wmi je dit bien apparement car vu que je n ai aucun exemple de dispatch sur celui ci je ne sait pas trop comment l utiliser :/
j ai tenté un truc du style (bon ca marche pas au niveau du dispatch c est normal je l ai fait au pifometre..
Bon jusqu au get object tout va bien c est pres il aime pas ..si quelqu'un à une idee...
J'espere avoir etait assez clair et merci d'avance pour votre aide..
voila plus de detail sur mes recherches...
J'ai un peu chiné et apparement avec le package javax.Wbem.cim on peut acceder à la CIM cependant je ne l'ai vu que pour solaris donc je me pause les questions suivantes..
est ce que ce package fonctionne sous windows..meme maniere de fonctionner etc..
enfin si cela ne convient pas sous windows quelqu'un à t'il une solution alternative..
j'ai vu egalement sur le net le jacob project qui permet de manipuler des activx mais la le probleme c est que j ai pas assez de doc pour savoir comment manipuler les methodes pour faire ma requete sur la CIM...
Bon apparement avec jacob j arrive a creeer l activx coresondant a l objet wmi je dit bien apparement car vu que je n ai aucun exemple de dispatch sur celui ci je ne sait pas trop comment l utiliser :/
j ai tenté un truc du style (bon ca marche pas au niveau du dispatch c est normal je l ai fait au pifometre..
import java.sql.Connection;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
/**
* @author SPetit
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public class Win32Cim {
public static void main(String args[]){
try {
ActiveXComponent wmi = new ActiveXComponent("winmgmts:{impersonationLevel=impersonate}!\\\\127.0.0.1\\root\\cimv2");
Object query = wmi.getObject();
Object test = Dispatch.call(query,"ExecQuery","Select * From win32_process");
Variant variant = new Variant(false);
variant = Dispatch.get(test,"name");
}
catch (Exception e) {
System.out.println("Exception: "+e);
}
}
}
Bon jusqu au get object tout va bien c est pres il aime pas ..si quelqu'un à une idee...
J'espere avoir etait assez clair et merci d'avance pour votre aide..
bon je tente une reduction de ma demande on sait jamais... ;-)
arg!!
avec jacob j arrive a créer mon activx :
ActiveXComponent wmi = new ActiveXComponent("winmgmts:{impersonationLevel=impersonate}!\\\\127.0.0.1\\root\\cimv2");
je suis super content mais maintenant quand j essaye de recuperer les propriété /methode/dispatch (j suis pas un pro en la question donc je sais pas trop) je n y arrive pas..j ai teste un truc du genre:
Object select = Dispatch.get(wmi,"ExecQuery");
le probleme c est qu il me fait une exeption en me disant qu il n arrive pas a maper ExecQuery
Quelqu'un sait il ou je peu trouver les nom des propriété /methode/dispatch de cet objet???
arg!!
avec jacob j arrive a créer mon activx :
ActiveXComponent wmi = new ActiveXComponent("winmgmts:{impersonationLevel=impersonate}!\\\\127.0.0.1\\root\\cimv2");
je suis super content mais maintenant quand j essaye de recuperer les propriété /methode/dispatch (j suis pas un pro en la question donc je sais pas trop) je n y arrive pas..j ai teste un truc du genre:
Object select = Dispatch.get(wmi,"ExecQuery");
le probleme c est qu il me fait une exeption en me disant qu il n arrive pas a maper ExecQuery
Quelqu'un sait il ou je peu trouver les nom des propriété /methode/dispatch de cet objet???
Merci à tous ceux qui m ont lu...
le probleme est reglé..
Tout marche bien j suis happy..
JE FAIS DU WMI EN JAVA
truc de ouf ^^
le probleme est reglé..
Tout marche bien j suis happy..
JE FAIS DU WMI EN JAVA
truc de ouf ^^
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
je le ferai volontier mais il me faudrai ton mail....
je poste ici une partie
sinon le projet sur laquelle je me suis basé est la...
http://danadler.com/jacob/
c'est à eux surtout qu'il faut dire merci...;-)
mais je crois que le site est down en ce moment
donc faut recuperer les .jar sur leur site (jacob.jar)
et apres voila un exemple de ce que je fait:
le "principal"
Recherche des propriétés d'un table CIM
recuperation des valeurs
bon j 'ai encore un probleme pour recuperer le contenu des tableaus de chaines de caractéres...je sais pas comment recuperer leur dispatch...enfin j vais bien trouver ^^
sinon pour l'insertion dans la table c 'est plus chaud car pour certaine methode ya une reecriture dans les arguments (ce qui implique les poinyeurs..chose difficil à obtenir en java)
bon courage et tiens moi au jus..et n'hesite pas à me poser des questions sur le code ;-)
Seigneur canard a votre service
COIN!
je poste ici une partie
sinon le projet sur laquelle je me suis basé est la...
http://danadler.com/jacob/
c'est à eux surtout qu'il faut dire merci...;-)
mais je crois que le site est down en ce moment
donc faut recuperer les .jar sur leur site (jacob.jar)
et apres voila un exemple de ce que je fait:
le "principal"
/*
* Created on 5 juil. 2004
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
package WmiQueryInterface;
import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.StringTokenizer;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Variant;
/**
* @author SPetit
*
* java WmiQueryInterface.Win32Cim "Select * From Win32_Process"
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public class Win32Cim {
public static String TargetIp;
public static String query;
public static Object querysubclasse;
public static ActiveXComponent wmi;
public static void main(String args[]){
try {
//declarations:
String Tabproperties[]=null;
StringBuffer queryresult = new StringBuffer();
//SPTODO : Passage de parametres complementaires comme
//l ip de la machine a "requeter"
//verification du nombre de parametres en entrée
int nb_args = args.length;
if(nb_args>2)return;
else{
TargetIp =args[0];
if(nb_args==2)query = args[1].toString();
}
/*
* Pour test recuperation chaine et ip via saisie utilisateur
*/
/*
System.out.println("saisir une requete ou appuyer sur entrée :");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String retour = br.readLine();
if(!"".equals(retour))
{
*/
query="Select * from Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE";
/*
}
System.out.println("saisir target ip ou appuyer sur entrée :");
br = new BufferedReader(new InputStreamReader(System.in));
retour = br.readLine();
if(!"".equals(retour))
{
TargetIp=retour;
}*/
TargetIp = "iteis040018";//"iteis010109";//"10.177.235.156";
/*
* Creation de l objet wmi (connection à la base)
*/
try
{
String username = "Administrateur";
String password = "";
//init
wmi = new ActiveXComponent("WbemScripting.SWbemLocator");
// connection au serveur
Variant varRet;
//nombre de parametres
Variant varParams[] = new Variant[4];
//les 2 parametres
varParams[0] = new Variant(TargetIp);
varParams[1] = new Variant("root\\cimv2");
varParams[2] = new Variant(username);
varParams[3] = new Variant(password);
//connection au serveur
varRet = wmi.invoke("ConnectServer", varParams);
//recuperation du dispatch de l objet resultant
querysubclasse = varRet.toDispatch();
}
catch (Exception e) {
System.out.println("Exception: "+e);
return;
}
/**
*
* cas d'une requet SELECT
*
*/
//verification de la requete
String tablename=null;
StringTokenizer stoken = new StringTokenizer(query);
for(int i=0;i<4;i++)
{
tablename = stoken.nextToken(" ");
}
//recuperation des propriétés
stoken = new StringTokenizer(query);
if(!(stoken.nextToken("*").equals(query))&&(tablename!=null))
{
//recuperation de la liste des propriétés
CimProperties Prop = new CimProperties(querysubclasse);
Tabproperties = Prop.GetProperties(tablename);
}
else
{
//local variable
ArrayList arrayprop = new ArrayList();
stoken = new StringTokenizer(query);
stoken.nextToken(" ");
String properties = stoken.nextToken(" ");
stoken = new StringTokenizer(properties);
//rcuperation des prop dans la requete
while (stoken.hasMoreTokens()) {
arrayprop.add(stoken.nextToken(","));
}
Tabproperties = new String[arrayprop.size()];
for (int i = 0; i < arrayprop.size(); i++) {
Tabproperties[i] = (String) arrayprop.get(i);
}
}
//recherche des donnees
if((Tabproperties!=null)&&(query!=null))
{
CimValues Val = new CimValues(Tabproperties,querysubclasse,query);
queryresult = Val.GetValues();
}
//ecriture du resultat dans un fichier
File fichier = new File("Result.xml");
FileWriter fluxecriture = new FileWriter(fichier);
fluxecriture.write(queryresult.toString());
fluxecriture.close();
//ecriture console
//System.out.println(queryresult);
//execution d'un exe sur une machine distante
CimExecute exec = new CimExecute(querysubclasse);
exec.Execute();
}
catch (Exception e) {
System.out.println("Exception: "+e);
}
}
}
Recherche des propriétés d'un table CIM
/*
* Created on 8 juil. 2004
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
package WmiQueryInterface;
import com.jacob.com.Dispatch;
import com.jacob.com.EnumVariant;
import com.jacob.com.Variant;
import java.util.ArrayList;
/**
* @author SPetit
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public class CimProperties {
static Object querysubclasse;
public String tabproperties[];
static ArrayList resultats = new ArrayList();
public CimProperties(Object activx) {
//initialisation
querysubclasse = activx;
}
public void GetSubClasses(){
try
{
/*
* Recuperation de la liste des classes wmi
*/
Variant subclasselist = Dispatch.call(querysubclasse, "SubclassesOf");
Object enumsubclasselist = subclasselist.toDispatch();
EnumVariant penumsubclasselist = new EnumVariant(enumsubclasselist);
Variant varenumsubclasselist;
while((varenumsubclasselist = penumsubclasselist.Next())!=null)
{
Object objenumsubclasselist = varenumsubclasselist.toDispatch();
Variant retenumsubclasseelement = Dispatch.call(objenumsubclasselist,"path_");
String resultat = retenumsubclasseelement.toString();
System.out.println(resultat);
}
int z= 0;
}
catch (Exception e) {
System.out.println("Exception: "+e);
}
}
public String[] GetProperties(String classepath){
try
{
//recherche des propriétés
Variant varclasse = Dispatch.call(querysubclasse, "Get",classepath);
Object classe = varclasse.toDispatch();
Variant peopertieslist = Dispatch.call(classe,"properties_");
Object liste = peopertieslist.toDispatch();
EnumVariant pliste = new EnumVariant(liste);
Variant elementliste;
while((elementliste = pliste.Next())!=null)
{
Object objenumsubclasselist = elementliste.toDispatch();
Variant retelement = Dispatch.call(objenumsubclasselist,"name");
resultats.add(retelement.toString());
}
tabproperties = new String[resultats.size()];
for (int i = 0; i < resultats.size(); i++) {
tabproperties[i] = (String) resultats.get(i);
}
return tabproperties;
}
catch (Exception e) {
System.out.println("Exception: "+e);
return null;
}
}
}
recuperation des valeurs
/*
* Created on 8 juil. 2004
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
package WmiQueryInterface;
import java.util.StringTokenizer;
import com.jacob.com.Dispatch;
import com.jacob.com.EnumVariant;
import com.jacob.com.Variant;
/**
* @author SPetit
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public class CimValues {
static Object ObjConnect;
static String TabProperties[];
static int NB_PROPERTIES;
static String querystring;
static String tablename;
static String elementname;
public CimValues(String Tabprop[],Object activx,String query){
//initialisation
querystring = query;
TabProperties = Tabprop;
ObjConnect = activx;
NB_PROPERTIES = Tabprop.length;
//decoupage de la querystring
StringTokenizer st = new StringTokenizer(query);
for(int i=0;i<4;i++)
{
tablename = st.nextToken(" ");
}
st = new StringTokenizer(tablename);
for(int i=0;i<2;i++)
{
elementname = st.nextToken("_");
}
}
public StringBuffer GetValues()
{
StringBuffer XmlStream = new StringBuffer();
Variant selectParam = new Variant(querystring);
Variant retquery = Dispatch.call(ObjConnect, "ExecQuery", selectParam);
Object enumvalues = retquery.toDispatch();
EnumVariant penumvalues = new EnumVariant(enumvalues);
Variant ElementEnum;
XmlStream.append("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n");
XmlStream.append("<"+tablename+">\n");
while((ElementEnum = penumvalues.Next())!=null)
{
XmlStream.append("<"+elementname+">\n");
for(int i =0;i<NB_PROPERTIES;i++)
{
Object obEnum = ElementEnum.toDispatch();
Variant RetValue = Dispatch.call(obEnum,TabProperties[i]);
String resultat = RetValue.toString();
if("???".equalsIgnoreCase(resultat))
{
String test=TabProperties[i]+"(0)";
try
{
RetValue = Dispatch.call(obEnum,test);
resultat = RetValue.toString();
int z=0;
}
catch(Exception e) {}
}
XmlStream.append("<"+TabProperties[i]+">"+resultat+"</"+TabProperties[i]+">\n");
}
XmlStream.append("</"+elementname+">\n");
}
XmlStream.append("</"+tablename+">\n");
return XmlStream;
}
}
bon j 'ai encore un probleme pour recuperer le contenu des tableaus de chaines de caractéres...je sais pas comment recuperer leur dispatch...enfin j vais bien trouver ^^
sinon pour l'insertion dans la table c 'est plus chaud car pour certaine methode ya une reecriture dans les arguments (ce qui implique les poinyeurs..chose difficil à obtenir en java)
bon courage et tiens moi au jus..et n'hesite pas à me poser des questions sur le code ;-)
Seigneur canard a votre service
COIN!
Bonjour
je viens de voir ton post concernant la communication entre Java et WMI, je prépare un diplôme d'ingé au CNAM et j'ai comme projet de faire un truc "similaire" sous Windows et Linux.
J'aurais savoir si tu pouvais me donner plus d'infos sur ce que tu voulais faire exactement, et surtout si aujoud'hui ça tournait.
En fait ce qui me gêne dans ton code c'est l'utilisation de l'activex car tu perds l'aspect portable de JAVA.
Merci de ta réponse
je viens de voir ton post concernant la communication entre Java et WMI, je prépare un diplôme d'ingé au CNAM et j'ai comme projet de faire un truc "similaire" sous Windows et Linux.
J'aurais savoir si tu pouvais me donner plus d'infos sur ce que tu voulais faire exactement, et surtout si aujoud'hui ça tournait.
En fait ce qui me gêne dans ton code c'est l'utilisation de l'activex car tu perds l'aspect portable de JAVA.
Merci de ta réponse
Bonjour,
alors oui cela tourne.
En effet l'utilisation de l'activex me fait perdre la portabilité mais l'objet de ce que je voulais faire c'estait de pouvoir consulter les informations system d'une machine sous windows avec java.
Enfin pouvoir inter agir avec la base CIM.
Ce qui en natif n'est pas possible avec java.
Comme il n'y a pas d'api (java) dispo pour communiquer via WMI.
La seul solulion etait de s'interfacer avec l'activex dispo (mais pas tres documenté) .
Enfin si tu veux un peux plus de renseignement ou les sources completes fait moi signe.
alors oui cela tourne.
En effet l'utilisation de l'activex me fait perdre la portabilité mais l'objet de ce que je voulais faire c'estait de pouvoir consulter les informations system d'une machine sous windows avec java.
Enfin pouvoir inter agir avec la base CIM.
Ce qui en natif n'est pas possible avec java.
Comme il n'y a pas d'api (java) dispo pour communiquer via WMI.
La seul solulion etait de s'interfacer avec l'activex dispo (mais pas tres documenté) .
Enfin si tu veux un peux plus de renseignement ou les sources completes fait moi signe.
Bonjour
Je te remercie pour ta réponse, en fait je vais t'expliquer un peu plus en détail ce que je souhaite faire, c'est réaliser un inventaire de parc "portable" via wbem (norme qui définit le protocole WMI).
Maintenant j'ai comme inpératif d'utiliser JAVA (langage que je ne maîtrise pas, mais ça c'est un détail). Ce qui pourrait s'avérer intéressant dès lorsd c'est d'utiliser WBEM/CMI sous windows via WMI, mais aussi sous linux. J'ai trouvé pas mal d'infos à ce sujet comme WBEMServices qui fournit des classes JAVA qui semblent bien aller pour utiliser WMI.
Avais tu été fouiller dans ce coin (coin) là ou non ?
Qu'en penses tu ?
Meric de ton aide
Je te remercie pour ta réponse, en fait je vais t'expliquer un peu plus en détail ce que je souhaite faire, c'est réaliser un inventaire de parc "portable" via wbem (norme qui définit le protocole WMI).
Maintenant j'ai comme inpératif d'utiliser JAVA (langage que je ne maîtrise pas, mais ça c'est un détail). Ce qui pourrait s'avérer intéressant dès lorsd c'est d'utiliser WBEM/CMI sous windows via WMI, mais aussi sous linux. J'ai trouvé pas mal d'infos à ce sujet comme WBEMServices qui fournit des classes JAVA qui semblent bien aller pour utiliser WMI.
Avais tu été fouiller dans ce coin (coin) là ou non ?
Qu'en penses tu ?
Meric de ton aide
Oui il semblerai bien qu'il y ai pas mal de package permettant de faire cela sous unix ou linux. (à l'origine de la base CIM piqué par windows à partir de windows 2000).
Donc pour faire ton inventaire de machine linux/unix cela devrait etre plutot simple.
Par contre pour windows c'est une autre affaire. je vais t'avouer que depuis septembre 2004 je n'ai pas appronfondi le sujet donc je ne sais pas si il y a un nouveau package dispo permettant de le faire.
Le code que je presente la est en fait ma reponse à cette absence en 2004 (meme si je n'ai pas tout developpé puisque j'ai utiliser un package open source permettant deja d'interfacer les activex).
apres faut savoir sous quel os ton appli va tourner?
ya des solutions alternatives pour windows avec l'execution de VBscript par exemple.
Donc pour faire ton inventaire de machine linux/unix cela devrait etre plutot simple.
Par contre pour windows c'est une autre affaire. je vais t'avouer que depuis septembre 2004 je n'ai pas appronfondi le sujet donc je ne sais pas si il y a un nouveau package dispo permettant de le faire.
Le code que je presente la est en fait ma reponse à cette absence en 2004 (meme si je n'ai pas tout developpé puisque j'ai utiliser un package open source permettant deja d'interfacer les activex).
apres faut savoir sous quel os ton appli va tourner?
ya des solutions alternatives pour windows avec l'execution de VBscript par exemple.
pas mal de package sous linux c'est un grand mot :P mais effectivement la debian semble désormais intégrer openWBEM (équivalent de WMI)
Je comprends que tu n'ais pas approfondi le sujet, depuis 2004 c'est vieux LOL, et je dois avouer que l'idée n'est pas mauvaise d'utiliser l'activeX.
concernant l'OS l'impératif du CNAM c'est Linux (Debian) mais accessoirement Krosoft, d'où le fait qu'ils imposent JAVA (dans ce cas tu "t'affranchis" théoriquement de l'OS)
Pour Windows j'ai déjà fait tourné pas mal de trucs avec WMI, en développant des scripts en Wscript et en VBS, ainsi que des trucs sous Excel (si si ça fonctionne) et c'est vrai que dans ces cas là c'est vraiment simple, mais effectivement en java ça semble se compliquer (mais déjà JAVA est compliqué non ?
Meric encore pour tes remarques.
Je comprends que tu n'ais pas approfondi le sujet, depuis 2004 c'est vieux LOL, et je dois avouer que l'idée n'est pas mauvaise d'utiliser l'activeX.
concernant l'OS l'impératif du CNAM c'est Linux (Debian) mais accessoirement Krosoft, d'où le fait qu'ils imposent JAVA (dans ce cas tu "t'affranchis" théoriquement de l'OS)
Pour Windows j'ai déjà fait tourné pas mal de trucs avec WMI, en développant des scripts en Wscript et en VBS, ainsi que des trucs sous Excel (si si ça fonctionne) et c'est vrai que dans ces cas là c'est vraiment simple, mais effectivement en java ça semble se compliquer (mais déjà JAVA est compliqué non ?
Meric encore pour tes remarques.