說明:爲何使用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"}'