alguém que já trabalhou com WMI poderia me fornecer a documentação?
Documentação WMI
8 Respostas
zehdapora ,
Bom dia !
http://msdn.microsoft.com/en-us/library/aa394554(v=vs.85).aspx
Exemplos de APIs para trabalhar com WMI:
Jacob http://danadler.com/jacob/
Jawin http://sourceforge.net/projects/jawinproject/files/
Com4J http://com4j.java.net/
Jwmi http://henryranch.net/software/jwmi-query-windows-wmi-from-java/
Para brincar com wmi recomendo o wmiexplorer , muito bom.
Se for usar o Jwmi e estiver com probremas com os caracteres acentuados , me posta que te mando o código com a solução.
muito obrigado!
fico feliz em ter ajudado :thumbup:
Estou utilizando o jWMI, mas não tenho conhecimento de todas as propriedades para realizar as WQL, e necessito delas para desenvolver meu TCC. Estou desenvolvendo um estudo de caso utilizando a tecnologia JMX para gerenciar recursos de hardware e software em plataformas Windows e Linux.
Te recomendo fazer o download do wmiexplorer , nele vc pode visualizar todas as classes e os valores de cada um para sua maquina ou de maquina remota na rede.
Segue o link: http://www.hostmonitor.biz/download/wmiexplorer.zip
Segue abaixo uma classe de exemplo que usei para conectar usando Jwmi:
import java.text.Collator;
import java.util.Collections;
import java.util.Vector;
public class WmiConnect {
/**
*
* @param args
* @throws Exception
*/
public synchronized Vector<String> executa (String strQuery,String item_selecionado,String host,String user,String senha) throws Exception {
//String item = new String();
Vector<String> vetor = new Vector<String>();
//Jwmi jwmi = new Jwmi();
try {
String name = Jwmi.getWMIValue(strQuery,item_selecionado);
System.out.println(name);
String info[] = name.split("\r\n");
for(int i = 0;i<info.length;i++) {
info[i] = this.convertAcentosVbs2Java(info[i]);
vetor.add(info[i]);
}
Collections.sort(vetor,Collator.getInstance() );
//System.out.println(info[2]);
//System.exit(0);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return vetor;
}
public synchronized String executaStr (String strQuery,String item_selecionado,String host,String user,String senha) throws Exception {
//String item = new String();
String name = "";
//Jwmi jwmi = new Jwmi();
try {
name = Jwmi.getWMIValue(strQuery,item_selecionado);
System.out.println(name);
/*
String info[] = name.split("\n");
for(int i = 0;i<info.length;i++) {
vetor.add(info[i]);
}
*/
//System.out.println(info[2]);
//System.exit(0);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
name = convertAcentosVbs2Java(name);
return name;
}
private String convertAcentosVbs2Java(String str) {
String resultado = "";
try {
//String wmi = wmiConnect.executaStr("SELECT * FROM Win32_UserAccount WHERE Name='j16315770'", "FullName", "localhost", "", "");
//System.out.println(wmi);
//Character letra = new Character('c');
//char r[] = letra.toChars(8218);
System.out.printf("%c",111);
//String acentosVbs = "";
String acentosVbs = Jwmi.getVBSAcentos();
String acentosJava = "àáâãäèéêëìíîïòóôõöùúûüç";
//WmiConnect wmiConnect = new WmiConnect();
//String resultado = "";
//String resultadoFinal = "";
resultado = str.replace( acentosVbs.charAt(0), acentosJava.charAt(0));
for(int i = 1;i < acentosVbs.length();i++) {
System.out.println(acentosVbs.charAt(i)+"Java:"+acentosJava.charAt(i));
resultado = resultado.replace( acentosVbs.charAt(i), acentosJava.charAt(i));
//resultado = resultado;
System.out.println("Resultado parcial:"+ resultado);
//resultadoFinal = resultado;
//if(i < acentosVbs.length()) {
// resultadoFinal = resultado;
//}
}
return resultado;
//System.out.println("Final:"+ resultadoFinal);
//for(int i = 0;i<str.length();i++) {
//System.out.println(wmi.codePointAt(i));
//}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return resultado;
}
}
Essa classe acima usa String (uma implementação correta seria usando StringBuffer fique a vontade para modificar).
O Jwmi usa VBS para pegar as informações por esse motivo ele só ira rodar em ambiente Windows.
Caso vc queirar pegar as informações de um servidor Windows a partir de uma maquina Linux ou qualquer outro sistema diferente de Windows , vc pode criar uma aplicação java para ficar ativa no servidor Windows e desenvolver uma aplicação java que se conecta nesse servidor e te retorna as informações coletadas pelo Jwmi.
Espero ter ajudado…
Boa sorte com seu TCC :thumbup:
Boa tarde zehdapora,
Estou começando a utilizar o JWMI, li seu tópico.
Você recomenda o uso do JWMI ou prefere outra api como o Jacob ou o com4j?
O meu objetivo é controlar filas de impressão.
Abraço
Poderia me passar o método Jwmi.getVBSAcentos() ou apenas os caracteres acentuados padrão do vscript?
zehdapora ,
Bom dia !
Segue abaixo o metodo getVBSAcentos:
public synchronized static String getVBSAcentos() throws Exception
{
String vbScript = getVBScriptAcentos();
String tmpDirName = getEnvVar("TEMP").trim();
String tmpFileName = tmpDirName + File.separator + "jwmiAcentos.vbs";
writeStrToFile(tmpFileName, vbScript);
String output = execute(new String[] {"cmd.exe", "/C", "cscript.exe", tmpFileName});
new File(tmpFileName).delete();
return output.trim();
}
E o metodo getVBScriptAcentos:
private synchronized static String getVBScriptAcentos()
{
String vbs = "wscript.echo \"àáâãäèéêëìíîïòóôõöùúûüç\""+CRLF;
// String vbs = "Dim oWMI : Set oWMI = GetObject(\"winmgmts:\")"+CRLF;
/*
vbs += "Dim classComponent : Set classComponent = oWMI.ExecQuery(\""+wmiQueryStr+"\")"+CRLF;
vbs += "Dim obj, strData"+CRLF;
vbs += "For Each obj in classComponent"+CRLF;
String[] wmiFieldNameArray = wmiCommaSeparatedFieldName.split(",");
for(int i = 0; i < wmiFieldNameArray.length; i++)
{
vbs += " strData = strData & obj."+wmiFieldNameArray[i]+" & VBCrLf"+CRLF;
}
vbs += "Next"+CRLF;
vbs += "wscript.echo strData"+CRLF;
*/
return vbs;
}
Ele só reconhece os caracteres em minusculas , mas não é dificil colocar as maiusculas para reconhecer.
Qualquer duvida só postar.