wmi4j是纯Java实现的Windows WMI客户端,它基于j-interop针对WMI从新封装,提供了更便捷的方法,能知足基本的windows管理,包括服务管理,性能查询,执行脚本等等。java
wmi4j下载
用Maven的朋友们能够直接引入,groupId=cn.chenlichao, artifactId=wmi4j, version=0.9。 源码地址: Github: https://github.com/chenlichao-cn/wmi4j使用其余构件框架的朋友,能够去maven中央库或者http://maven.oschina.net查询wmi4j,固然要记得下载它的依赖包:git
org.glassfish.main.external:j-interop-repackaged:4.0github
org.slf4j:slf4j-api:1.7.7apache
org.apache.commons:commons-lang3:3.1windows
使用wmi4j管理Windows服务
用wmi4j管理很方便,少许代码就能够完成功能,下面咱们用一个实际的例子来演示如何获取服务列表,查询服务,获取指定服务状态,启动服务和中止服务几个最经常使用的功能。api
WMI相关的文档,请参考微软官方文档: WMI Reference服务器
public static void main(String[] args) {
//设定链接参数
String server = "192.168.1.201";
String username = "administrator";
String password = "password";
String namespace = "root\\cimv2";
//构建链接器
SWbemLocator locator = new SWbemLocator(server,username,password,namespace);
try {
//链接远程服务器
SWbemServices wbemServices = locator.connectServer();
//遍历服务列表
SWbemObjectSet services = wbemServices.instancesOf("Win32_Service");
System.out.println("服务数量: " + services.getCount());
Iterator iterator = services.iterator();
while(iterator.hasNext()) {
SWbemObject service = iterator.next();
System.out.println(service.getObjectText());
System.out.println("-----------------------------------------------");
break; //服务不少,就只打一个吧
}
//查询Windows开头的服务
SWbemObjectSet winServices = wbemServices.execQuery(
"select * from Win32_Service where DisplayName like 'Windows%'");
System.out.println("Windows开头的服务数: " + winServices.getCount());
//经过服务名,直接获取服务。
//注意: 服务名不是services.msc列表里显示的名称,显示的名称是DisplayName属性,
//而get方法必须使用主键属性Name. 例如: Application Management服务,
//在services.msc是这样显示的, 但它服务名是AppMgmt, 能够经过属性查看。
SWbemObject dhcpClient = wbemServices.get("Win32_Service.Name='AppMgmt'");
System.out.println("服务名: " + dhcpClient.getPropertyByName("Name")
.getStringValue());
System.out.println("显示名: " + dhcpClient.getPropertyByName("DisplayName")
.getStringValue());
//获取服务状态
System.out.println("状态: " + dhcpClient.getPropertyByName("State").getStringValue());
//启动服务
dhcpClient.execMethod("StartService");
System.out.println("启动后的状态: " + wbemServices.get("Win32_Service.Name='AppMgmt'")
.getPropertyByName("State").getStringValue());
//中止服务
dhcpClient.execMethod("StopService");
System.out.println("再次中止后的状态: "
+ wbemServices.get("Win32_Service.Name='AppMgmt'")
.getPropertyByName("State").getStringValue());
} catch (WMIException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
}
}