0

我正在尝试使用以下程序使用ProcessBuilder. 该程序包含本地路径,但我想调用位于网络上的相同脚本

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class TestPowershell {

    public static void main(String[] args) throws IOException
    {
        Runtime runtime = Runtime.getRuntime();
        //Process proc = runtime.exec("cmd.exe /c powershell.exe  C:\\get-sevice-gsvc.ps1"); // old code

        ProcessBuilder pb = new ProcessBuilder("powershell", "-file", "C:\\get-sevice-gsvc.ps1", "127.0.0.1");
        pb.redirectErrorStream(true);
        Process proc = pb.start();

        InputStream is = proc.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader reader = new BufferedReader(isr);
        String line;
         try{


       while ((line = reader.readLine()) != null)
       {
            System.out.println(line);

       }
        reader.close();
        proc.getOutputStream().close();
        }
        catch(Exception e){
            System.out.println(e.getMessage());
        }

    }

}

有什么想法吗?

4

1 回答 1

0

据我了解,您需要脚本在它所在的盒子上运行。在这种情况下,它并不是那么简单(否则,您只需使用您已经指出的网络路径)。如果您使用ProcessBuilder,那么脚本将在执行 Java 代码的机器上运行,而不管脚本位于何处。为了远程运行脚本,您可以使用PowerShell,因为它能够连接到另一台机器并在那里运行命令。在这种情况下,您将编写一个简单的PowerShell脚本来远程调用原始脚本,然后使用ProcessBuilder在您的计算机上启动这个新脚本而不是原来的。然而,有一些障碍需要克服。他们中的大多数处理用户权限。花时间研究远程命令执行的PowerShell文档,或在 StackOverflow 或其他地方搜索此主题。

于 2013-04-20T20:39:28.513 回答