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