简介

WMI简介:

WMI(Windows Management Instrumentation,Windows 管理规范)是一项核心的 Windows 管理技术;用户可以使用 WMI 管理本地和远程计算机。

WQL简介:

WQL就是WMI中的查询语言,WQL的全称是WMI Query Language,简称为WQL,翻译成中文好像可以成为Windows管理规范查询语言。熟悉SQL语言的朋友会感觉它和SQL非常相似。

WQL其实非常简单,它有如下特点:

1、每个WQL语句必须以SELECT开始;

2、SELECT后跟你需要查询的属性名(我刚才对应SQL将其称之为字段名了),也可以像SQL一样,以*表示返回所有属性值;

3、FROM关键字;

4、你要查询的类的名字;

5、另外,如果你想精确查询结果还可以加上WHERE条件从句。比如某个类有Enable属性,你可以在查询的时候加上WHERE ENABLE=true,条件可以添加and or等关系操作。

如以下的都是正确的WQL语句:

Select * From Win32_LogicalDisk where drivetype=3    ’‘’‘查询所有硬盘分区

SELECT * FROM Win32_share  ’‘查询所有共享目录

SELECT * FROM Win32_NetworkAdapterConfiguration WHERE DHCPEnabled=TRUE

SELECT Description FROM Win32_Account WHERE Name='Administrator'

SELECT Freespace,DeviceID FROM Win32_LogicalDisk

在搜索框输入wbemtest即可查看WQL测试工具

转载:http://my.oschina.net/noahxiao/blog/73163

1、环境准备

a、windows要开启Remote Registry与Windows Management Instrumentation服务

b、禁用放火墙

c、window2008系统注册表越狱(高版本的win)

需要修改regedit中HKEY_CLASSES_ROOT\CLSID\{76A64158-CB41-11D1-8B02-00600806D9B6}的权限,windows2008不再给Administrators完全控制权。

http://files.helgeklein.com/downloads/SetACL/current/SetACL%20(executable%20version).zip

set_wmi_reg_acl.cmd

SetACL.exe -on "HKEY_CLASSES_ROOT\CLSID\{76A64158-CB41-11D1-8B02-00600806D9B6}" -ot reg -actn setowner -ownr "n:Administrators"

SetACL.exe -on "HKEY_CLASSES_ROOT\CLSID\{76A64158-CB41-11D1-8B02-00600806D9B6}" -ot reg -actn ace -ace "n:Administrators;p:full"

以超级管理员身份执行这个cmd,就会把owner与完全控制权限授予Administrators组

注意这里需要把这个cmd命令和SetACL.exe copy到C:\Windows\System32文件夹

2、程序代码

java类

import org.jinterop.dcom.common.JIException;

import org.jinterop.dcom.common.JISystem;

import org.jinterop.dcom.core.*;

import org.jinterop.dcom.impls.JIObjectFactory;

import org.jinterop.dcom.impls.automation.IJIDispatch;

import org.jinterop.dcom.impls.automation.IJIEnumVariant;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import java.net.UnknownHostException;

import java.util.logging.Level;

/**

* Created with IntelliJ IDEA.

* User: noah

* Date: 8/16/12

* Time: 8:00 AM

* To change this template use File | Settings | File Templates.

*/

public class WmiService {

private JIComServer m_ComStub = null;

private IJIComObject m_ComObject = null;

private IJIDispatch m_Dispatch = null;

private String m_Address = null;

private JISession m_Session = null;

private IJIDispatch m_WbemServices = null;

private static final String WMI_CLSID = "76A6415B-CB41-11d1-8B02-00600806D9B6";

private static final String WMI_PROGID = "WbemScripting.SWbemLocator";

private Logger logger = LoggerFactory.getLogger(this.getClass());

public WmiService(String address) {

JISystem.setAutoRegisteration(true);

JISystem.getLogger().setLevel(Level.WARNING);

m_Address = address;

}

public void query(String strQuery) {

System.out.println("query:" + strQuery);

JIVariant results[] = new JIVariant[0];

try {

results = m_WbemServices.callMethodA("ExecQuery", new Object[]{new JIString(strQuery), JIVariant.OPTIONAL_PARAM(), JIVariant.OPTIONAL_PARAM(), JIVariant.OPTIONAL_PARAM()});

IJIDispatch wOSd = (IJIDispatch) JIObjectFactory.narrowObject((results[0]).getObjectAsComObject());

int count = wOSd.get("Count").getObjectAsInt();

IJIComObject enumComObject = wOSd.get("_NewEnum").getObjectAsComObject();

IJIEnumVariant enumVariant = (IJIEnumVariant) JIObjectFactory.narrowObject(enumComObject.queryInterface(IJIEnumVariant.IID));

IJIDispatch wbemObject_dispatch = null;

for (int c = 0; c < count; c++) {

Object[] values = enumVariant.next(1);

JIArray array = (JIArray) values[0];

Object[] arrayObj = (Object[]) array.getArrayInstance();

for (int j = 0; j < arrayObj.length; j++) {

wbemObject_dispatch = (IJIDispatch) JIObjectFactory.narrowObject(((JIVariant) arrayObj[j]).getObjectAsComObject());

}

String str = (wbemObject_dispatch.callMethodA("GetObjectText_", new Object[]{1}))[0].getObjectAsString2();

System.out.println("(" + c + "):");

System.out.println(str);

System.out.println();

}

} catch (JIException e) {

e.printStackTrace();

}

}

public void connect(final String domain, final String username, final String password) {

try {

m_Session = JISession.createSession(domain, username, password);

m_Session.useSessionSecurity(true);

m_Session.setGlobalSocketTimeout(5000);

m_ComStub = new JIComServer(JIProgId.valueOf(WMI_PROGID), m_Address, m_Session);

IJIComObject unknown = m_ComStub.createInstance();

m_ComObject = unknown.queryInterface(WMI_CLSID);

m_Dispatch = (IJIDispatch) JIObjectFactory.narrowObject(m_ComObject.queryInterface(IJIDispatch.IID));

JIVariant results[] = m_Dispatch.callMethodA(

"ConnectServer",

new Object[]{

new JIString(m_Address),

JIVariant.OPTIONAL_PARAM(),

JIVariant.OPTIONAL_PARAM(),

JIVariant.OPTIONAL_PARAM(),

JIVariant.OPTIONAL_PARAM(),

JIVariant.OPTIONAL_PARAM(),

0,

JIVariant.OPTIONAL_PARAM()

}

);

m_WbemServices = (IJIDispatch) JIObjectFactory.narrowObject((results[0]).getObjectAsComObject());

} catch (JIException e) {

e.printStackTrace();

if (m_Session != null) {

try {

JISession.destroySession(m_Session);

} catch (JIException e1) {

logger.error(e.getMessage(), e);

}

}

} catch (UnknownHostException e) {

if (m_Session != null) {

try {

JISession.destroySession(m_Session);

} catch (JIException e1) {

logger.error(e.getMessage(), e);

}

}

}

}

public void disconnect() {

try {

JISession.destroySession(m_Session);

} catch (JIException e) {

logger.error(e.getMessage(), e);

}

}

public static void main(String[] args) {

WmiService wmiService = new WmiService("172.16.158.129");

//域(一般为空字符),用户名,密码

注意:链接的用户一定是超级管理员Administrator

wmiService.connect("", "username", "password");

//系统信息

wmiService.query("SELECT * FROM Win32_ComputerSystem");

//CPU信息

wmiService.query("SELECT * FROM Win32_PerfFormattedData_PerfOS_Processor WHERE Name != '_Total'");

//内存信息

wmiService.query("SELECT * FROM Win32_PerfFormattedData_PerfOS_Memory");

//磁盘信息

wmiService.query("SELECT * FROM Win32_PerfRawData_PerfDisk_PhysicalDisk Where Name != '_Total'");

wmiService.disconnect();

}

}

mavne配置(pom.xml)

org.kohsuke.jinterop

j-interop

2.0.8-kohsuke-1

3、有可能出现的问题

报错a

org.jinterop.dcom.common.JIException: Message not found for errorCode: 0xC0000034

at org.jinterop.winreg.smb.JIWinRegStub.winreg_OpenHKLM(JIWinRegStub.java:115)

at org.jinterop.dcom.core.JIProgId.getIdFromWinReg(JIProgId.java:130)

at org.jinterop.dcom.core.JIProgId.getCorrespondingCLSID(JIProgId.java:162)

at org.jinterop.dcom.core.JIComServer.(JIComServer.java:413)

at org.noah.wmitest.WmiService.connect(WmiService.java:122)

at org.noah.wmitest.WmiService.main(WmiService.java:177)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

Caused by: jcifs.smb.SmbException: The system cannot find the file specified.

at jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:522)

at jcifs.smb.SmbTransport.send(SmbTransport.java:622)

at jcifs.smb.SmbSession.send(SmbSession.java:239)

at jcifs.smb.SmbTree.send(SmbTree.java:109)

at jcifs.smb.SmbFile.send(SmbFile.java:718)

at jcifs.smb.SmbFile.open0(SmbFile.java:923)

at jcifs.smb.SmbFile.open(SmbFile.java:940)

at jcifs.smb.SmbFileOutputStream.(SmbFileOutputStream.java:142)

at jcifs.smb.TransactNamedPipeOutputStream.(TransactNamedPipeOutputStream.java:32)

at jcifs.smb.SmbNamedPipe.getNamedPipeOutputStream(SmbNamedPipe.java:187)

at rpc.ncacn_np.RpcTransport.attach(RpcTransport.java:92)

at rpc.Stub.attach(Stub.java:105)

at rpc.Stub.call(Stub.java:110)

at org.jinterop.winreg.smb.JIWinRegStub.winreg_OpenHKLM(JIWinRegStub.java:113)

... 10 more

需要开启Remote Registry服务

报错b

org.jinterop.dcom.common.JIException: Message not found for errorCode: 0xC0000001

at org.jinterop.winreg.smb.JIWinRegStub.winreg_OpenHKLM(JIWinRegStub.java:115)

at org.jinterop.dcom.core.JIProgId.getIdFromWinReg(JIProgId.java:130)

at org.jinterop.dcom.core.JIProgId.getCorrespondingCLSID(JIProgId.java:162)

at org.jinterop.dcom.core.JIComServer.(JIComServer.java:413)

at org.noah.wmitest.WmiService.connect(WmiService.java:87)

at org.noah.wmitest.WmiService.main(WmiService.java:142)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

Caused by: jcifs.smb.SmbException: Connection timeout

jcifs.util.transport.TransportException: Connection timeout

org.jinterop.dcom.common.JIException: Message not found for errorCode: 0x8001FFFF

at org.jinterop.dcom.core.JIComServer.init(JIComServer.java:576)

at org.jinterop.dcom.core.JIComServer.initialise(JIComServer.java:481)

at org.jinterop.dcom.core.JIComServer.(JIComServer.java:414)

at org.noah.wmitest.WmiService.connect(WmiService.java:87)

at org.noah.wmitest.WmiService.main(WmiService.java:142)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

Caused by: java.net.ConnectException: Connection timed out

java wmi远程桌面服务器_WMI实现远程监控多台windows服务器相关推荐

  1. Rapid7警告声明:远程桌面协议(RDP)暴露数百万 Windows 终端

    本文讲的是Rapid7警告声明:远程桌面协议(RDP)暴露数百万 Windows 终端,去年6月,卡巴斯基实验室研究人员揭露,黑客利用远程桌面协议(RDP)窃取85,000台来自医院.学校.航空公司和 ...

  2. 如何解决远程桌面无法连接问题--远程桌面连接工具

    win7系统远程桌面连接已开启却无法连接的应对措施,具体如下: 方法1.查询并记录远程计算机的IP,点击"开始--运行",输入"cmd"命令后回车,准确查看并记 ...

  3. android远程桌面软件毕设_2019 远程桌面解决方案综述

    原文标题:The Cloud Question: Native or Hosted? 原文作者:Jeff Canter, Chief Operating Officer, NICE inContact ...

  4. vnc远程桌面_手机vnc远程桌面,手机vnc远程桌面,使用配置详解

    手机vnc远程桌面,手机vnc远程桌面除了可以应用于在Windows 操作系统下面可视化地远程Linux操作系统,还可以在安卓操作系统下面可视化地远程连接windows的操作系统,两者都需要在需要被远 ...

  5. 手机vnc远程桌面,手机vnc远程桌面教程,配置详解

    手机vnc远程桌面,手机vnc远程桌面除了可以应用于在Windows 操作系统下面可视化地远程Linux操作系统,还可以在安卓操作系统下面可视化地远程连接windows的操作系统,两者都需要在需要被远 ...

  6. readhat 远程可视化桌面_手机vnc远程桌面,手机vnc远程桌面,使用配置详解

    手机vnc远程桌面,手机vnc远程桌面除了可以应用于在Windows 操作系统下面可视化地远程Linux操作系统,还可以在安卓操作系统下面可视化地远程连接windows的操作系统,两者都需要在需要被远 ...

  7. 手机vnc远程桌面,手机vnc远程桌面的配置说明

    手机vnc远程桌面,手机vnc远程桌面除了可以应用于在Windows 操作系统下面可视化地远程Linux操作系统,还可以在安卓操作系统下面可视化地远程连接windows的操作系统,两者都需要在需要被远 ...

  8. 手机vnc远程桌面,手机vnc远程桌面教程加配置说明

    手机vnc远程桌面,手机vnc远程桌面除了可以应用于在Windows 操作系统下面可视化地远程Linux操作系统,还可以在安卓操作系统下面可视化地远程连接windows的操作系统,两者都需要在需要被远 ...

  9. Windows server 2012远程桌面会话主机和远程桌面授权。

    原博:http://www.cnblogs.com/stragon/p/5546323.html 摘要:对于windows server2012服务器一般都是默认能够支持两用户远程登录,而通过安装远程 ...

最新文章

  1. 算法导论学习笔记 第2章 算法基础
  2. mysql 5.7.21-linux_MySQL 5.7.21 Linux平台安装 Part 2
  3. 多线程之并发基础(四)
  4. asp Eval()函数的一些使用总结
  5. mcs-51单片机CPU的内部结构及工作原理
  6. 区块链基础知识的归纳与总结
  7. 易语言excel内容查找助手
  8. POJ3580:SuperMemo
  9. SQLSERVER大小写转换方法
  10. 穿上就不想脱下!这款火爆ins的夏季凉鞋,防滑,抗污,速干不臭脚!让你秒变型男!...
  11. CentOS 7.2 安装Subversion(SVN)
  12. 修改broadcom 4322无线网卡ID教程,不再显示第三方无线网卡
  13. CSS画矩形、圆、半圆、弧形、半圆、小三角、疑问框
  14. ajax的响应与取消响应
  15. 第十四章 字符编码(补充)
  16. 牛客每日练习----骑行川藏,Lucky Coins,不凡的夫夫
  17. 一级计算机无法正常评分,计算机一级评分标准
  18. RaspberryPi+OneNET MQTT方式 数据上传和命令下发
  19. 《企业应用架构模式》30天阅读计划
  20. JavaWeb 图书管理系统(数据库综合实验)

热门文章

  1. 渝粤教育,我是客服,2022重返王者荣耀,再露凶残,欢迎约战
  2. 新一代蓝牙对工业物联网(IIOT)的应用
  3. php中id如何与删除关联,ThinkPHP查询语句与关联查询用法实例
  4. java加减乘除运算顺序_java 实现加减乘除混合运算
  5. suse11 rpm 安装mysql_SuSE11安装MySQL5.7.22:RPM安装方式
  6. ios realm 文件_关于ios:具有后台进程的Realm实例会丢失数据
  7. 非科班Java尝试全国高校计算机能力挑战赛第三届计挑赛
  8. 不全?MySQL数据类型精讲,定点日期枚举文本字符串,json二进制,空间,选择建议,完整详细可收藏
  9. linux adc测试程序,基于Qt4.7的ADC测试程序
  10. 安卓4.4玩java_Android4.4运行过程中闪退java.lang.NoClassDefFoundError