由于编码问题,java通过远程调用winrm形式,在控制台返回字符中,包括中文时,显示???,出现中文乱码!

通过调整$outputencoding的方式,依然出现乱码。所以采用曲线实现的方式,通过将结果重定向输入到文件(指定文件编码格式),再读取文件的形式,获得执行脚本的结果。

代码如下:

package com.test;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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) throws UnsupportedEncodingException, InterruptedException  {
        WinRmClientContext context = WinRmClientContext.newInstance();
        
        WinRmTool.Builder builder = WinRmTool.Builder.builder("192.168.1.128", "Administrator", "password");
        //builder.setAuthenticationScheme(AuthSchemes.NTLM);
        builder.port(5985);
        builder.useHttps(false);
        builder.disableCertificateChecks(false);
        builder.context(context);
        WinRmTool tool =  builder.build();
        tool.setOperationTimeout(0L);
        System.out.println("========");
        WinRmToolResponse resp = tool.executePs("C:/Users/Administrator/WindowsAuditPolicy.ps1 |out-file WindowsAuditPolicy_result.txt -encoding utf8");
        Thread.sleep(3000);
         resp = tool.executeCommand("type C:\\Users\\Administrator\\WindowsAuditPolicy_result.txt");
        String out = resp.getStdOut();
        String err = resp.getStdErr();
        System.out.println(out);
        context.shutdown();
        
        
    }

}