说明:为何使用winrm?java
在Linux /UNIX/WINDOWS系统中,通常经过远程链接的方式在远端执行脚本命令或者其余,是经过SSH或者Telnet。笔者以前写过几遍运用JAVA使用SSH或者TELNET链接操做系统执行命令的博客。但这些协议之间存在的差异的。web
在LINUX、UNIX系统中通常经过SSH协议来登陆、执行命令;apache
而在Windows操做系统中,因为没有自带SSH协议,通常经过Telnet协议去登陆、执行命令;可是Telnet服务默认是不开启的。因此在大规模环境中,操做比较麻烦。另外Telnet协议存在安全问题。windows
若是不须要执行命令,而是经过远程桌面的形式来操做windows,能够使用RDP协议,java有一个开源的项目properJavaRDP,能够在web页面或者GUI形式提供实现方案。安全
接回本题:maven
Windows远程管理(WinRM)ide
Server2008R2中默认开启该服务,从Server2012开始,该服务便集成在系统中默认开启,Win7默认安装此服务,可是默认为禁用状态,Win8,Win10默认开启。oop
因此能够经过这种winrm来实现。测试
winrm4jui
maven导入
<dependency> <groupId>io.cloudsoft.windows</groupId> <artifactId>winrm4j</artifactId> <version>0.5.0</version> <!-- WINRM4J_VERSION --> </dependency>
测试代码:
package com.test; import org.apache.http.client.config.AuthSchemes; import io.cloudsoft.winrm4j.client.WinRmClientContext; import io.cloudsoft.winrm4j.winrm.WinRmTool; import io.cloudsoft.winrm4j.winrm.WinRmToolResponse; public class RemoteWinrm4JTest { public static void main(String[] args) { WinRmClientContext context = WinRmClientContext.newInstance(); WinRmTool.Builder builder = WinRmTool.Builder.builder("ip", "username", "password"); builder.setAuthenticationScheme(AuthSchemes.NTLM); builder.port(5985); builder.useHttps(false); builder.context(context); WinRmTool tool = builder.build(); tool.setOperationTimeout(5000L); System.out.println("========"); String command = "dir"; WinRmToolResponse resp = tool.executeCommand(command); System.out.println(resp.getStatusCode()); String out = resp.getStdOut(); System.out.println(out); context.shutdown(); } }
遇到问题及解决:
服务端winrm修改设置:
winrm set winrm/config/service '@{AllowUnencrypted="true"}'