【问题标题】:Invoking Powershell from Java is executes infinate从 Java 调用 Powershell 会无限执行
【发布时间】:2014-11-12 14:53:41
【问题描述】:

我正在尝试从 java 程序中调用 powershell 命令,并且我可以使用以下代码来实现它。但问题是执行 powershell 命令后代码不会停止。

此代码打印 powershell 命令输出。但它正在执行无限[打印输出后执行不停止]。

有谁知道这里的错误是什么?

Java 代码:

public class PowerShellHelper 
{
public ProcessBuilder processbuilder = null; 
public Process process = null;

public PowerShellHelper() 
{

}

String execPowerShell()
{   
    String command = "Get-WmiObject Win32_Process -filter ProcessId=5988";
    String[] cmds = {"powershell.exe",command};
    String result= null;
    try
    {
        processbuilder = new ProcessBuilder(cmds);
        processbuilder.redirectErrorStream(true);           
        process = processbuilder.start();
        BufferedReader r = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line = null ;
        while (true)
        {                        
            line = r.readLine();
            if(line == null) {break;}
            System.out.println(line);
        }
        process.getOutputStream().close();

    }
    catch(Exception e)
    {
        System.out.println("Exception "+e);
    }
    return result;
}

public static void main(String[] args) 
{
    PowerShellHelper psh  = new PowerShellHelper();
    psh.execPowerShell();   
}

}

【问题讨论】:

    标签: java eclipse powershell command


    【解决方案1】:

    只需添加:

    process.getOutputStream().close();
    

    在打开 BufferedReader 之后。 这应该可以解决问题。

    【讨论】:

    • 非常感谢!!有效。但我不明白这背后的逻辑,你能告诉我这里的诀窍是什么吗?
    • 当然 - 当打开 powershell 进程时,它会等待您的输入(一些要执行的命令)。这可以防止 BufferedReader 在进程仍在工作时返回 NULL(并且仍然可以生成一些输入)。通过关闭 OutputStream,您只需让 powershell 退出并让 BufferedReader 知道不会再生成任何输入。
    猜你喜欢
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多