最近项目有需要使用java 调用windows WMI脚本,由于对windows了解不是很深感觉还是蛮新鲜的,经过在网上的搜索最终确定使用j-Interop这个纯java方式的开源框架(非纯java的还有com4j之类的),j-interop这东东在国内站上的资料很少再加上本人英文很水浏览英文很吃力所以在查找相关资料时还是费了不少精力的,这里把自己的一些成果拿出来跟大家分享分享也算是为国内网站补补这方面的资料。
首先介绍一下j-interop
官网:http://www.j-interop.org/index.html
这里我只简单描述一下,具体还是去官网上看简介吧:
j-interop是纯java方式操作windows com组件的一个开源库,它可以操作word,excel,sqlserver和windows 的内部组件(注册表,WMI),我想喜欢黑客的兄弟对这个一定感兴趣。
终于要入正题,该示例展示了!
示例1:展示得到CPU信息
1.在写java代码之前我们需要知道在windows下怎样使用VBScript 调用WMI
strComputer = "." '计算机的名称,.代表本机
strClass = "Win32_Processor"
Set wbemServices = Getobject("winmgmts:\\" & strComputer) '1.连接到 WMI 服务
Set obj=wbemServices.InstancesOf(strClass) '2.检索 WMI 托管资源的实例
WScript.Echo "---------------------------"
For Each objService In obj
WScript.Echo objService.GetObjectText_ '3.显示 WMI 托管资源的属性
Next
新建文本文件将脚本COPY到文本中,再将后缀更改为“.vbs”。你可以双击运行不过我推荐打开CMD找到文本存放的位置输入命令"cscript XX.vbs" 如图:
2.相应java代码
public static void main(String[] args) {
String address="127.0.0.1";
JISession session=null;
try{
JISystem.getLogger().setLevel(Level.ALL);
JISystem.setInBuiltLogHandler(false);
JISystem.setAutoRegisteration(true);
/** 1.连接到 WMI 服务 * */
session = JISession.createSession("域名","用户名","密码");
session.useSessionSecurity(true);
session.setGlobalSocketTimeout(5000); // session超时时间
JIComServer server = new JIComServer(JIProgId
.valueOf("WbemScripting.SWbemLocator"), address, session);
IJIDispatch dispatch = (IJIDispatch) JIObjectFactory.narrowObject(server.createInstance()
.queryInterface(IJIDispatch.IID));
// params数组对应的 WMI对象方法参数,JIVariant.OPTIONAL_PARAM()代表可选参数
Object[] params = new Object[] {
new JIString(address),
new JIString("ROOT\\CIMV2"),
JIVariant.OPTIONAL_PARAM(),
JIVariant.OPTIONAL_PARAM(),
JIVariant.OPTIONAL_PARAM(),
JIVariant.OPTIONAL_PARAM(),
new Integer(0), JIVariant.OPTIONAL_PARAM() };
JIVariant[] results = dispatch.callMethodA("ConnectServer", params);
IJIDispatch wbemServices = (IJIDispatch) JIObjectFactory
.narrowObject(results[0].getObjectAsComObject());
/** 2.检索 WMI 托管资源的实例* */
JIVariant[] results2= wbemServices.callMethodA("InstancesOf", new Object[] {
new JIString("Win32_Processor"), new Integer(0), JIVariant.OPTIONAL_PARAM()
});
IJIDispatch wbemObjectSet_dispatch = (IJIDispatch)JIObjectFactory.narrowObject(results2[0].getObjectAsComObject());
/** 3.显示 WMI 托管资源的属性,得到_NewEnum属性迭代元素* */
JIVariant variant_enu = wbemObjectSet_dispatch.get("_NewEnum");
IJIComObject enumComObject = variant_enu.getObjectAsComObject();
IJIEnumVariant enumVariant = (IJIEnumVariant) JIObjectFactory
.narrowObject(enumComObject
.queryInterface(IJIEnumVariant.IID));
Object[] elements = enumVariant.next(1);
JIArray aJIArray = (JIArray) elements[0];
JIVariant[] array = (JIVariant[]) aJIArray.getArrayInstance();
for (JIVariant variant : array) {
IJIDispatch wbemObjectDispatch = (IJIDispatch) JIObjectFactory
.narrowObject(variant.getObjectAsComObject());
JIVariant[] v = wbemObjectDispatch.callMethodA(
"GetObjectText_", new Object[] { 1 });
System.out.println(v[0].getObjectAsString().getString());
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (JIException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
JISession.destroySession(session);
} catch (JIException e) {
e.printStackTrace();
}
}
}
以上java代码对于不了解wmi的朋友来说可能有些难懂所以建议先去下面地址了解一下wmi
http://msdn.microsoft.com/zh-cn/library/ms974579.aspx
上面java代码要是无法运行,需要先照如下地址配制一下DCOM(记得看下系统版本)
http://j-integra.intrinsyc.com/support/com/doc/remoteaccess.html
这里还要特别说明下以上代码在公司电脑上是没有问题的,不过在我自己的电脑上没有运行成功。我想可能是域名的关系在我自己电脑上是没有域名的我也不知道如何设置.....如有大侠在本机上运行成功还请指教。
很郁闷的是项目最终没有使用该库,所以我对该库的了解也只有这么一点点!本来还有查询共享目录的例子想和大家分享不过由于公司限制弄不上来,这次先不上等过几天有机会补上!小弟第一次发贴有什么不对还请指教
下面是个英文网站的例子:
http://jeanmichel.guillaume.free.fr/index.php/wmi-wbem-microsoft-hyper-v/
- 大小: 18.1 KB
分享到:
相关推荐
windows 系统下启动与结束java的jar包的脚本(包括如何设置进程名称)
这个bat脚本资源可以在Windows环境下实现Java程序的守护进程和自动重启。它通过一个循环监控Java程序进程,如果检测到程序异常退出,会自动重启程序。同时具有可配置的重启次数和重启间隔时间。 这个小巧但实用的bat...
包含了删除n天以前的文件脚本、删除n天以前的文件夹脚本、使用说明(使用该脚本,百度新增计划任务,可每日定时清理)
windows环境下运行java的脚本 前几天研发时遇到eclipse运行不稳定的情况,明明实现了的功能有的时候能运行到,有时运行不到,非常让人头疼。于是想在本地搭一套运行环境,方便比较。 说明:以下情况主要针对java运行...
windows系统jstack自动抓取脚本
bat脚本参数传递,实现java -jar apktool.jar -version可以使用apktool -version代替
windows运行jar包指定jdk路径的脚本文件。可以不用系统的jdk运行,指定某个文件下的jdk运行jar包
该脚本尝试查找所有现有的Windows安装和相应的Windows版本。 此后,更改权限后,将以“良性”字节序列替换负责密码验证的CMP指令。 为了恢复更改,过程恰恰相反。 整个想法源于WindowsGate和Astr0baby的教程 用法:...
推荐Lua是一个实用的脚本语言,相对于Python来说,比较小巧,但它功能并...Lua在C\C++的实现我就不多说了,网上随便一搜,到处都是这方面的介绍,我想说的是如何在Java下使用Lua以提高编程效率、增强你的程序可扩展性。
2.后端使用java编程语言的vue框架 3.项目中登录模块用到token 4.源码包部署调试 5.每个笔记均有对应源码 数据库:mysql5.7/8.0或以上版本 持久化层使用Mybatis,项目管理Maven3, 项目中登录模块用到token
双击dos脚本,一键完成jdk环境变更设置。详细使用看脚本中的注释说明。设置java_home classpath 添加到系统path
用于loadrunner上使用java脚本
Apache Subversion-Windows MSVC二进制文件包括Apache httpd mod_X_svn和JavaHL Native Library适配器VC15 & VS16 VS16:工具集14.28.29333 VC15:工具集14.16.27023 MSVC Redist - 窗户套件10.0.19041.0 针对指定...
使用盲水印保护创作者的知识产权using invisible watermark to protect creator's intellectual property
正则表达式测试工具正则表达式测试工具,使用Java开发,方便跨平台离线使用.Java,Python和C#当前支持正则表达式实现引擎,当前版本为beta。使用JavaFX 11组件开发,请遵循BSD协议,您可以免费获取和修改该程序,...
面的代码由Gary Nebbett写就.Gary Nebbett乃是WINDOWS NT/2000 NATIVE API REFERENCE的作者.乃NT系统一等一的高手.下面就分析一些他的这段代码. 这段代码在PROCESS没有结束前就将启动PROCESS的EXE文件删除了. ...
下载了一个版本切换脚本,死活win10 用不了,然后自己修改了下,总算可以使用了。
操作系统:Microsoft Windows2000/XP/2003/2008 2. EasyJspRun!6.0.1 集成软件 ---------------------- JspRun! 6.0.0 GBK Release 20101028 / JspRun! 6.0.0 UTF-8 Release 20101028 Apache 2.2.14 for win ...
Tomcat、Jboss等Java application server修改启动脚本,把执行java的命令行后面加上参数-agentlib:<动态链接库文件所在路径>\classloader 适应环境: 操作系统:所有操作系统,Windows系统、Linux/Unix,只是运行...