Java调用wmi执行dos命令

weixin_38048892 2015-01-14 10:46:48
如题,我在网上找了一段代码,是java调用wmi的,但是这代码只能监控主机状态,查看了api也没有找到能执行dos命令得方法,请问调用wmi后是否可以执行dos命令?如果可以,请大神明示。 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 java.net.UnknownHostException; import java.util.logging.Level; 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"; public WmiService(String address) { JISystem.setAutoRegisteration(true); JISystem.getLogger().setLevel(Level.WARNING); m_Address = address; } public String[] 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; String[] strs = new String[count]; 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(); strs[c] = str; } return strs; } catch (JIException e) { e.printStackTrace(); } return null; } 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);//创建一个ComServer IJIComObject unknown = m_ComStub.createInstance();//返回IJIComObject代表JIComServer服务器 m_ComObject = unknown.queryInterface(WMI_CLSID);//查询IID为WMI_CLSID得IJIComObject对象 m_Dispatch = (IJIDispatch) JIObjectFactory.narrowObject(m_ComObject.queryInterface(IJIDispatch.IID));//通过IJIComObject来返回IJIDispatch的一个引用 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) { } } } catch (UnknownHostException e) { if (m_Session != null) { try { JISession.destroySession(m_Session); } catch (JIException e1) { } } } } public void disconnect() { try { JISession.destroySession(m_Session); } catch (JIException e) { } } public static void main(String[] args) { WmiService wmiService = new WmiService("192.168.1.134"); wmiService.connect("", "administrator", "goat"); // wmiService.query("SELECT * FROM Win32_BaseBoard"); wmiService.query("SELECT * FROM Win32_Processor"); // wmiService.query("SELECT * FROM Win32_VideoController"); // wmiService.query("SELECT * FROM Win32_NetworkAdapter"); // wmiService.query("SELECT * FROM Win32_ComputerSystem"); // wmiService.query("SELECT * FROM Win32_ComputerSystemProduct"); // wmiService.query("SELECT * FROM Win32_CDROMDrive"); // 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(); } } 最后有个哥们给我提示,但是我没有找到有这样得方法可以调用的。 set ww=createobject("wbemscripting.swbemlocator") set cc=ww.connectserver("192.168.1.134","root/cimv2","administrator","goat") Set pp=cc.get("Win32_Process") pp.create("cmd /c echo test wmi for remote! >c:\a.log")
...全文
17 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复

473

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧