2013-07-22 150 views
0

如何使用java調用powershell命令。運行powershell命令時出錯

try { 
     ExecuteWatchdog watchdog = new ExecuteWatchdog(20000); 
     Process powerShellProcess = Runtime.getRuntime().exec(
       "powershell.exe \"D:\\testscript.ps1\""); 
     if (watchdog != null) { 
      watchdog.start(powerShellProcess); 
     } 
     BufferedReader stdInput = new BufferedReader(new InputStreamReader(
       powerShellProcess.getInputStream())); 
     String line; 
     System.out.println("Output :"); 
     while ((line = stdInput.readLine()) != null) { 
      System.out.println(line); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

注:我映射正確的路徑。

我試着用上面的代碼,但它給像

java.io.IOException: Cannot run program "powershell.exe": CreateProcess error=2, The system cannot find the file specified 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:459) 
    at java.lang.Runtime.exec(Runtime.java:593) 
    at java.lang.Runtime.exec(Runtime.java:431) 
    at java.lang.Runtime.exec(Runtime.java:328) 
    at com.powershell.PsJava.main(PsJava.java:17)) 

任何錯誤請你在這方面的幫助。

+1

1)閱讀(並實現)*所有* [當Runtime.exec()不會](http://www.javaworld.com/jw-12-2000/jw-1229-traps。 HTML)。這可能會解決問題。如果不是,它應該提供更多關於失敗原因的信息。然後忽略它引用'exec'並使用'ProcessBuilder'構建'Process'。還要將'String arg'分解爲'String [] args'來解釋其本身包含空格的參數。 2)標題中不需要添加主標籤。 –

+0

它只是找不到文件。將''powershell.exe''改爲'「C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe」' – Cole9350

+0

謝謝你@ Cole9350,問題解決了。 – Sathiya

回答

1

環境變量並不總是暴露給java編譯器。你的堆棧錯誤只是告訴你它找不到powershell可執行文件,因爲它不會自動知道在$ PSHOME var中查找。

的修復僅僅是指定的完整路徑:
更改"powershell.exe""C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"

0

可以使用從Java ProcessBuilder運行PowerShell命令。

ProcessBuilder builder = 
    new ProcessBuilder("powershell.exe", "/c", "Get-Process"); 
Process p = builder.start(); 
0

如果PowerShell的可執行在您的路徑然後確保你沒有選擇Use secret text(s) or file(s)特定的用戶名密碼憑證Build Environment段偶有。我不知道爲什麼,但這似乎是造成這個問題時,建立在我們的奴隸!