You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

winrs远程执行时如何自动填充命令行提示符的输入内容?

问题分析与解决方案

你的传值方式不正确,原因是本地管道传递的'Joe'只会发送给winrs进程本身,不会自动转发给远程机器上启动的java test.java进程的标准输入,导致Java程序读不到输入抛出异常。下面是几种可行的解决方法:

方法一:修改Java程序支持命令行参数(推荐)

如果可以修改test.java的代码,直接通过命令行参数接收用户名是最简洁的方式:

  1. 修改Java代码,从args数组获取输入:
public class test {
    public static void main(String[] args) {
        String username = args[0];
        System.out.println("Enter the name for user:" + username);
        // 后续逻辑使用username
    }
}
  1. 远程执行命令改为:
winrs /r:remoteHostServer /username:admin /password:xxxxxx powershell -c "Set-Location C:\test; java test.java Joe; `$user1 = Read-Host;"

方法二:在远程会话内将输入导向Java程序

如果无法修改Java代码,需要在远程的PowerShell会话内,把输入直接传递给Java进程:

方式1:远程会话内使用管道

注意要在远程执行的命令里包含管道逻辑,正确转义引号:

winrs /r:remoteHostServer /username:admin /password:xxxxxx powershell -c "Set-Location C:\test; 'Joe' | java test.java; `$user1 = Read-Host;"

方式2:使用Here-String简化引号转义

Here-String可以避免嵌套引号的转义问题,写法更清晰:

winrs /r:remoteHostServer /username:admin /password:xxxxxx powershell -c @"
Set-Location C:\test
'Joe' | java test.java
`$user1 = Read-Host
"@

补充说明

  • winrs的stdin处理和本地管道不同,本地管道的输入不会自动透传给远程启动的子进程,必须在远程命令链中明确处理输入传递。
  • 注意PowerShell中嵌套引号的转义规则:用反引号`转义双引号,或者用Here-String(@"和"@`包裹)来避免频繁转义。

内容的提问来源于stack exchange,提问作者RDX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 22:01:59