如何从Java程序调用位于网络上的powershell脚本?

时间:2013-04-15 12:40:15

标签: java powershell networking

我正在尝试使用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());
        }

    }

}

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

据我所知,你需要在它所在的盒子上运行脚本。在这种情况下,它并不那么简单(否则,您只需使用已经指示的网络路径)。如果使用 ProcessBuilder ,则脚本将在执行Java代码的计算机上运行,​​无论脚本驻留在何处。为了远程运行脚本,您可以使用 PowerShell ,因为它可以连接到另一台计算机并在那里运行命令。在这种情况下,您将编写一个简单的 PowerShell 脚本,远程调用原始脚本,并使用 ProcessBuilder 而不是原始脚本在您的计算机上启动此新脚本。但是,有一些障碍需要采取。他们中的大多数都涉及用户权利。花点时间研究远程命令执行 PowerShell 文档,或者搜索StackOverflow或其他地方的主题。