首页 > 代码库 > Java用wmi4j远程管理Windows服务

Java用wmi4j远程管理Windows服务

原文请访问:http://www.chenlichao.cn/opensource/74.html

wmi4j是纯Java实现的Windows WMI客户端,它基于j-interop针对WMI重新封装,提供了更便捷的方法,能满足基本的windows管理,包括服务管理,性能查询,执行脚本等等。

wmi4j下载

用Maven的朋友们可以直接引入,groupId=cn.chenlichao, artifactId=wmi4j, version=0.9。 源码地址: Github: https://github.com/chenlichao-cn/wmi4j使用其他构件框架的朋友,可以去maven中央库或者http://maven.oschina.net查询wmi4j,当然要记得下载它的依赖包:

  • org.glassfish.main.external:j-interop-repackaged:4.0

  • org.slf4j:slf4j-api:1.7.7

  • org.apache.commons:commons-lang3:3.1

使用wmi4j管理Windows服务

用wmi4j管理很方便,少量代码就可以完成功能,下面我们用一个实际的例子来演示如何获取服务列表,查询服务,获取指定服务状态,启动服务和停止服务几个最常用的功能。

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<SWbemObject> 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();
   }
}


本文出自 “立子” 博客,请务必保留此出处http://leaze.blog.51cto.com/83088/1559263

Java用wmi4j远程管理Windows服务