2013-04-15 38 views
0

我正在嘗試使用以下程序使用ProcessBuilder。該程序包含本地路徑,但我想調用位於網絡上的同一腳本。如何從Java程序調用位於網絡上的powershell腳本?

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

你想從網上下載腳本,然後運行它?或者向服務器發送請求,以便服務器可以運行它 – Jatin

+0

此腳本位於需要運行的遠程盒子上,然後我將在while循環中處理輸出。我不需要下載。沒有應用程序或服務器在遠程盒子上運行。我的意思是遠程機器上沒有接收器。這是一個普通的Java調用遠程PowerShell腳本。 – user617966

+0

你有遠程機器上的shell連接嗎?我的意思是某種SSH連接設置? – Jatin

回答

0

據我所知,你需要腳本運行在它所在的盒子上。在這種情況下,並不是那麼簡單(否則,您只需使用網絡路徑,就像您已經指出的那樣)。如果您使用ProcessBuilder,那麼腳本將在執行Java代碼的機器上運行,而不管腳本駐留在哪裏。爲了遠程運行腳本,您可以使用PowerShell,因爲它可以連接到另一臺計算機並在其中運行命令。在這種情況下,您可以編寫一個簡單的PowerShell腳本,遠程調用原始腳本,並使用ProcessBuilder而不是原始腳本在您的機器上啓動此新腳本。但是,要採取一些障礙。他們中的大多數處理用戶權利。花時間學習PowerShell文檔遠程命令執行或搜索StackOverflow或其他地方的這個主題。

相關問題