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();
   }
}
时间: 2024-10-26 16:18:54

Java用wmi4j远程管理Windows服务的相关文章

如何使用PowerShell管理Windows服务

[TechTarget中国原创] 作为一名系统管理员,最常见的任务之一就是学会管理Windows服务,这是保证Windows服务器和客户端正常运行的重要内容. 许多操作系统和应用程序都依赖于这些服务. Microsoft Management Console窗口是我们非常熟悉的一款Windows服务,通过该服务,管理员可以在本地或者远程计算机上操控服务.但是,一时间还不能改变几十台甚至几百台机器. 此时,PowerShell就派上用场了. PowerShell应用几个本地Cmdlet来管理Win

通过SSIS监控远程服务器Windows服务并发送邮件报警!

原文:通过SSIS监控远程服务器Windows服务并发送邮件报警! 利用SSIS不仅可以做BI项目的ETL,而且还可以做一些系统监控和维护工作,由于之前供应商写的Windows服务是读取ESB的消息进行处理,且通过OA流程与访客系统进行了集成,无论是ESB出现状况,还是Windows服务出现状况,都会对访问系统造成严重影响,导致内部员工无法进行接待外部人员,因此整体对ESB进行优化,在本人博客的前一篇已介绍了<通过SSIS监控远程服务器磁盘空间并发送邮件报警!>.本文实现的方法思路与此相同,仅

使用Windows Azure PowerShell远程管理Windows Azure虚拟机

对于Windows Azure,如果你还在使用windowsazure.com门户来管理虚拟机,那就显得不怎么高上大了.Windows Azure PowerShell 是一个功能强大的脚本环境,可用于在 Windows Azure 中控制和自动执行工作负荷的部署和管理.   安  装   通过Microsoft Web Platform Installer一键搞定安装.   登录Azure账户   启动安装好的Windows Azure PowerShell,使用“Add-AzureAccou

[转帖]Ansible批量远程管理Windows主机(部署与配置)

2018-09-12 12:04:42 https://blog.51cto.com/7424593/2174156 一.测试环境介绍 Ansible管理主机: 系统:   CentOS6.8 IP Addr: 172.16.10.22 Linux管理服务器需安装pip.pywinrm插件 Windows客户端主机: 系统:   Server2008R2 SP1 IP Addr: 172.16.10.23 Windows机器需要安装或升级powershell4.0以上版本,Server2008R

Windows 上的 SSH?使用 PowerShell Remoting 远程管理 Windows 服务器

Windows 上的 SSH?使用 PowerShell Remoting 远程管理 Windows 服务器 2018-07-01 Windows 约 2202 字 预计阅读 5 分钟 文章目录 Windows 世界的远程管理 基于 WinRM 的 PowerShell Remoting 配置无密码 的 PowerShell Remoting 体验 在 Linux/Unix 世界里 SSH 是个好东西,SSH 是 Secure Shell 的缩写,用它可以很容易连接到指定的服务器,并执行特定命令

利用Python脚本管理Windows服务

Windows服务常用的功能就是启动服务,关闭服务,重启服务和查询服务运行状态,其中查询服务运行状态是其他三种操作的基础. 本文中提到的使用Python脚本管理Windows服务实际上是调用win32serviceutil模块,此模块来自pywin32包,此模块本身有管理服务的功能,有兴趣的可以去阅读它的部分源码. 本脚本存在的目的是为了熟练Python的语法和基本操作,Windows下有更好的命令行工具来管理服务,如sc.Powershell等.通常命令行工具的执行速度要比services.m

[转]玩转Windows服务系列——命令行管理Windows服务

本文转自:http://www.cnblogs.com/hbccdf/p/managewindowsservicewithcmd.html 说到Windows服务的管理就不得不说通过命令行的方式管理Windows服务,因为无论是系统管理员,还是通过编程的方式调用cmd命令,命令行都是非常方便以及强大的工具. 接下来就看一下如何通过cmd命令管理Windows服务. 管理Windows服务的主要cmd命令 管理Windows服务的命令应该有很多,但是我所了解到的命令主要有两个:sc.net. 说是

使用virt-manager远程管理windows鼠标漂移的问题

在使用virt-manager远程管理windows虚拟机时,鼠标漂移导致无法操作windows,很不方便.解决办法,在虚拟机配置文件中找到<input type='mouse' bus='usb'>把mouse改为tablet或者在 <devices> </devices>中添加<input type='tablet' bus='usb'>然后关机重新加载配置文件,问题解决. 或者virt-manager图形化界面操作 原文地址:http://blog.5

通过Powershell远程管理Windows Azure上的虚拟机

Windows Azure上连接虚拟机想必不是件难事尤其是连接Windows操作系统简单点几下鼠标通过远程桌面RDPWindows Azure虚拟机会帮助你自动创建远程连接RDP的Profile你就能体验到公有云带来的便利.由于虚拟机外部连接都是通过端口映射连接的.当然基于区域网络目前Azure.CN中新创建的虚拟网络已经都是区域网络了当然你目前仍然可以创建基于地缘组的虚拟网络虽然并不推荐后可以创建虚拟机实例级别的公共IP地址所以你也可以跳过通过"云服务"端口映射的RDP而直接连接虚拟