Java 限制Powershell将输入命令打印到输出流

Java 限制Powershell将输入命令打印到输出流,java,powershell-5.1,Java,Powershell 5.1,我正在使用Java ProcessStream将输入命令写入本地机器上的powershell。现在的问题是,在输出的同时,我也看到了输入命令。如何限制输入命令显示在输出上 下面是复制相同内容的代码: 公共类示例{ 公共静态布尔isAlive(进程o){ 试一试{ p、 exitValue(); 返回false; }catch(异常e){return true;} } public stati void main(字符串[]args)引发IOException{ ProcessBuilder=新的

我正在使用Java ProcessStream将输入命令写入本地机器上的powershell。现在的问题是,在输出的同时,我也看到了输入命令。如何限制输入命令显示在输出上

下面是复制相同内容的代码:

公共类示例{
公共静态布尔isAlive(进程o){
试一试{
p、 exitValue();
返回false;
}catch(异常e){return true;}
}
public stati void main(字符串[]args)引发IOException{
ProcessBuilder=新的ProcessBuilder(“powershell”);
builder.redirectErrorStream(true);
Process=builder.start();
InputStream out=process.getInputStream();
OutputStream in=process.getOutputStream();
String bufferString=“echo hello\n”;
byte[]buffer=bufferString.getBytes();
int n=缓冲区长度;
写入(缓冲区,0,n);
in.flush();
while(isAlive(过程)){
int no=out.available();
如果(否>0){
int m=out.read(buffer,0,Math.min(no,buffer.length));
System.out.println(新字符串(缓冲区,0,m));
}
}
}
}
输出:
PS C://>回声你好
你好

我只需要在输出中输入“hello”。

以下内容对我很有用(但java程序永远不会终止,我必须杀死它)

导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.io.OutputStream;
公开课范例{
公共静态布尔isAlive(进程p){
试一试{
p、 exitValue();
返回false;
}
捕获(例外e){
返回true;
}
}
公共静态void main(字符串[]args)引发IOException{
ProcessBuilder=new ProcessBuilder(“powershell”,“-NoLogo”);
builder.redirectErrorStream(true);
Process=builder.start();
InputStream=process.getInputStream();
try(InputStreamReader isr=新的InputStreamReader(is);
BufferedReader out=新的BufferedReader(isr)){
OutputStream in=process.getOutputStream();
String bufferString=“echo hello”+System.lineSeparator();
byte[]buffer=bufferString.getBytes();
写入(缓冲区);
in.flush();
while(isAlive(过程)){
String line=out.readLine();
如果(!line.startsWith(“PS”)){
系统输出打印项次(行);
}
}
}
}
}
上述代码产生的输出仅为:

你好 @talex在回答您的问题时提到了以下内容:

这是不可能摆脱的
PS C://>
部分

这不是真的,因为您可以自定义PowerShell,但您写道您不想在输出中看到
echo hello
,这是不可能的,因此,@talex提到:

你必须自己过滤你的输入流

不显示
echo hello
表示不显示输入的命令。假设您打开一个PowerShell窗口,没有看到您输入的命令,但在按下ENTER键后,您希望看到输出。因此,我认为没有办法不显示
echo hello
,因此,在上面的代码中,我不会打印以PowerShell提示符开头的行


您可以在

中找到有关启动PowerShell的详细信息,恐怕无法摆脱
PS C://>
部分。所以你必须自己过滤你的输入流。谢谢Abra的详细回答。但我的用例是允许“\n”作为命令的一部分。例如,命令可以是:“echo x;\n echo y”。上述代码不会删除命令的“echo y”部分。