基于winrm4j版本0.10.0上重新写了个执行类,原代码关于设置编码的地方都写死了,无法重新设置,所以返回的中文会是乱码。这问题已向原作者反馈了https://github.com/cloudsoft/winrm4j/issues/133 ,希望后期能完善。
我自己重写了一个类,可以把这代码弄到自己项目:https://gitee.com/lnkToKing/open-share-code/blob/master/src/utils/WinRmExecutor.java
注意需要依赖 org.apache.commons:commons-lang3 工具包
使用方式
final WinRmClientBuilder builder = WinRmClient
.builder(WinRmExecutor.getEndpointUrl("127.0.0.1", null))
// .builder("http://127.0.0.1:5985/wsman")
.credentials("test", "123456");
try (WinRmExecutor executor = new WinRmExecutor(builder)) {
// executor.setUseHttps(true);
WinRmToolResponse response = executor.executeCmd("ipconfig");
System.out.println(response.getStatusCode());
System.out.println(response.getStdOut());
System.out.println(response.getStdErr());
System.out.println("---------------------");
response = executor.executePs("echo $env:temp");
System.out.println(response.getStatusCode());
System.out.println(response.getStdOut());
System.out.println(response.getStdErr());
System.out.println("---------------------");
String script = "@echo off\n" +
"echo %1 %2\n" +
"echo %3";
response = executor.executeBatScript(script, "aa bb 123", null);
System.out.println(response.getStatusCode());
System.out.println(response.getStdOut());
System.out.println(response.getStdErr());
}