日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

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

發(fā)布時(shí)間:2023/12/2 windows 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java wmi远程桌面服务器_WMI实现远程监控多台windows服务器 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

簡(jiǎn)介

WMI簡(jiǎn)介:

WMI(Windows Management Instrumentation,Windows 管理規(guī)范)是一項(xiàng)核心的 Windows 管理技術(shù);用戶可以使用 WMI 管理本地和遠(yuǎn)程計(jì)算機(jī)。

WQL簡(jiǎn)介:

WQL就是WMI中的查詢語(yǔ)言,WQL的全稱是WMI Query Language,簡(jiǎn)稱為WQL,翻譯成中文好像可以成為Windows管理規(guī)范查詢語(yǔ)言。熟悉SQL語(yǔ)言的朋友會(huì)感覺(jué)它和SQL非常相似。

WQL其實(shí)非常簡(jiǎn)單,它有如下特點(diǎn):

1、每個(gè)WQL語(yǔ)句必須以SELECT開(kāi)始;

2、SELECT后跟你需要查詢的屬性名(我剛才對(duì)應(yīng)SQL將其稱之為字段名了),也可以像SQL一樣,以*表示返回所有屬性值;

3、FROM關(guān)鍵字;

4、你要查詢的類的名字;

5、另外,如果你想精確查詢結(jié)果還可以加上WHERE條件從句。比如某個(gè)類有Enable屬性,你可以在查詢的時(shí)候加上WHERE ENABLE=true,條件可以添加and or等關(guān)系操作。

如以下的都是正確的WQL語(yǔ)句:

Select * From Win32_LogicalDisk where drivetype=3 ???’‘’‘查詢所有硬盤分區(qū)

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測(cè)試工具

轉(zhuǎn)載:http://my.oschina.net/noahxiao/blog/73163

1、環(huán)境準(zhǔn)備

a、windows要開(kāi)啟Remote Registry與Windows Management Instrumentation服務(wù)

b、禁用放火墻

c、window2008系統(tǒng)注冊(cè)表越獄(高版本的win)

需要修改regedit中HKEY_CLASSES_ROOT\CLSID\{76A64158-CB41-11D1-8B02-00600806D9B6}的權(quán)限,windows2008不再給Administrators完全控制權(quán)。

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"

以超級(jí)管理員身份執(zhí)行這個(gè)cmd,就會(huì)把owner與完全控制權(quán)限授予Administrators組

注意這里需要把這個(gè)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");

//域(一般為空字符),用戶名,密碼

注意:鏈接的用戶一定是超級(jí)管理員Administrator

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

//系統(tǒng)信息

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

//CPU信息

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

//內(nèi)存信息

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、有可能出現(xiàn)的問(wèn)題

報(bào)錯(cuò)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

需要開(kāi)啟Remote Registry服務(wù)

報(bào)錯(cuò)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

總結(jié)

以上是生活随笔為你收集整理的java wmi远程桌面服务器_WMI实现远程监控多台windows服务器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。