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

简介

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/355655.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何:在Spring中使用@Conditional和Condition注册组件

Spring中的Profile批注可以用于任何自动检测候选的Spring组件&#xff08;例如&#xff0c; Service Component&#xff0c; Service Component &#xff0c; Service Configuration等&#xff09;。 Profile批注接受单个配置文件或一组必须是活动的配置文件&#xff0c;以使带…

java joda_java-Jodatime的开始时间和结束时间

对于那些来这里寻找“ js-joda”答案的人&#xff0c;您有两种选择&#xff0c;具体取决于要完成的工作选项1&#xff1a;您希望同一时区的一天开始由于您已选择根据与时区相关的即时时间来计算时间&#xff0c;因此应使用ZonedDateTime&#xff1a;import { ZonedDateTime, Lo…

Lowest Common Ancestor of a Binary Search Tree a Binary Tree

235. Lowest Common Ancestor of a Binary Search Tree 题目链接&#xff1a;https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/#/description 题目大意&#xff1a;给定一棵二叉查找树和两个节点p和q&#xff0c;要求返回这两个节点的第一个公共…

perl java_与Perl相比Java性能问题

我已经编写了一个Perl代码来处理大量CSV文件并获取输出,这需要0.8326秒才能完成.my $opname $ARGV[0];my files find . -name "*${opname}*.csv";mtime -10 -type f;my %hash;foreach my $file (files) {chomp $file;my $time $file;$time ~ s/.*\~(.*?)\..*/$1/…

controller调用另一个controller中的方法 获取返回值_必须掌握!你知道 Spring 中运用的 9 种设计模式吗 ?...

Spring中涉及的设计模式总结&#xff0c;在面试中也会经常问道 Spring 中设计模式的问题。本文以实现方式、实质、实现原理的结构简单介绍 Sping 中应用的 9 种设计模型&#xff0c;具体详细的刨析会在后面的文章发布&#xff0c;话不多说&#xff0c;来个转发、在看、收藏三连…

我个人的CRUD故事-或我如何来到CUBA平台

在此博客文章中&#xff0c;我想介绍一下我如何使用CUBA平台以及此工具的好处。 在我年轻的“业务应用程序开发”历史上&#xff0c;我将深入探讨不同的阶段&#xff0c;只为您提供一些背景知识。 因此&#xff0c;让我们从如何进入典型的CRUD应用程序开始&#xff0c;以帮助非…

MySQL分库分表环境下全局ID生成方案

转自&#xff1a;https://my.oschina.net/u/142836/blog/174465 在大型互联网应用中&#xff0c;随着用户数的增加&#xff0c;为了提高应用的性能&#xff0c;我们经常需要对数据库进行分库分表操作。在单表时代&#xff0c;我们可以完全依赖于数据库的自增ID来唯一标识一个用…

java 不定参数方法_java中不定长参数的使用方法

java中不定长参数的使用方法不定长参数方法的语法如下&#xff1a;返回值 方法名(参数类型...参数名称)在参数列表中使用“...”形式定义不定长参数&#xff0c;其实这个不定长参数a就是一个数组&#xff0c;编译器会将(int...a)这种形式看作是(int[] a)的形式。示例&#xff1…

光盘刻录只允许读取不能拷贝_原来 8 张图,就可以搞懂「零拷贝」了

作者 | 小林coding来源 | 小林coding(ID&#xff1a;CodingLin)前言磁盘可以说是计算机系统最慢的硬件之一&#xff0c;读写速度相差内存 10 倍以上&#xff0c;所以针对优化磁盘的技术非常的多&#xff0c;比如零拷贝、直接 I/O、异步 I/O 等等&#xff0c;这些优化的目的就是…

如何:带有Thymeleaf和Spring Boot的Java 8日期和时间

如果您碰巧使用Spring Boot和Thymeleaf&#xff0c;并且需要在视图中格式化Java 8 Date&#xff06;Time对象&#xff0c;则可以使用thymeleaf-extras-java8time –用于Java 8 Date&#xff06;Time API的Thymeleaf模块。 向现有的基于Maven或Gradle的Spring Boot项目中添加th…

纯java分布式内存数据库_最新Java岗面试清单:分布式+Dubbo+线程+Redis+数据库+JVM+并发...

最近可能有点闲的慌&#xff0c;没事就去找面试面经&#xff0c;整理了一波面试题。我大概是分成了Java基础、中级、高级&#xff0c;分布式&#xff0c;Spring架构&#xff0c;多线程&#xff0c;网络&#xff0c;MySQL&#xff0c;Redis缓存&#xff0c;JVM相关&#xff0c;调…

c++ 多核cpu序列号_详解CPU几个重点基础知识

作者 | 骏马金龙责编 | 阿秃关于CPU和程序的执行1、程序的运行过程&#xff0c;实际上是程序涉及到的、未涉及到的一大堆的指令的执行过程。当程序要执行的部分被装载到内存后&#xff0c;CPU要从内存中取出指令&#xff0c;然后指令解码(以便知道类型和操作数&#xff0c;简单…

5.8上午

数学分册基础概念 转载于:https://www.cnblogs.com/yanyuying/p/6828791.html

java log4j 写日志_Java log4j同时写入文本日志和数据库日志

版权声明&#xff1a;转载原创文章请以超链接形式请注明原文章出处&#xff0c;尊重作者&#xff0c;尊重原创&#xff01;恰饭广告Log4jUtil.javaimport org.apache.log4j.Logger;import org.apache.log4j.MDC;public class Log4jUtil {private static Logger logger Logger.…

订单生产计划表范本_工厂生产管理为什么需要ERP软件?

对于工厂来说&#xff0c;规模大了&#xff0c;管理问题也就随之多了&#xff0c;在工厂生产流程中&#xff0c;我们常见的一些生产现象&#xff0c;比如生产计划表徒具形式、各生产部门半成品堆积、生产计划达标率低、前后工序原材料或半成品衔接不上、经常追加或取消生产计划…

codeforces 701 E. Connecting Universities(树+ 边的贡献)

题目链接&#xff1a;http://codeforces.com/contest/701/problem/E 题意&#xff1a;有n个城市构成一棵树&#xff0c;一个城市最多有一个学校&#xff0c;这n个城市一共2*k个学校&#xff0c;要对这2*k个学校进行连边&#xff0c;使得所有连出来的边的和最大&#xff0c;每条…

拜托,Java。 最终是否支持多行字符串文字

我了解Java语言的思想很难以向后兼容的方式进行维护。 我知道JDK API&#xff08;例如集合&#xff09;的想法很难打破。 是。 我不明白为什么Java 仍然没有多行字符串文字。 您多久编写一次这样的JDBC代码&#xff08;或您想嵌入Java的任何其他外部语言或标记&#xff0c;例…

java memorystream 包_MemoryStream

MemoryStream位于System.IO命名空间&#xff0c;为系统内存提供流式的读写操作。常作为其他流数据交换时的中间对象操作。1、MemoryStream类封装一个字节数组&#xff0c;在构造实例时可以使用一个字节数组作为参数&#xff0c;但是数组的长度无法调整。使用默认无参数构造函数…

网站pc端分享QQ好友,空间,微博

在开发pc端网站的过程中&#xff0c;涉及到邀请好友的功能&#xff0c;之前单纯的复制粘贴已经无法满足用户的体验。故&#xff0c;仿照移动端添加自动分享到QQ好友&#xff0c;QQ空间&#xff0c;QQ微博的功能。 分享到QQ好友&#xff1a;http://connect.qq.com/widget/shareq…

python如果选择不在列表里_Python-list.remove(x)x不在列表中

我正在尝试在Python 3.3中创建一个简单的程序,该程序采用四个名称的列表,并将它们随机分配给列表中的另一个人.例如,如果名称是John,Aaron,Lydia和Robin&#xff1a; 约翰先走,然后选择一个名字.他不能画自己的东西.如果他这样做,他会把它放回去并再次抽签.说约翰画了罗宾的名字…