2013-07-22 4 views
0

Как вызвать команду powershell с помощью java.Ошибка при запуске команды 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(); 
    } 

Примечание: i сопоставьте правильный путь.

Я попытался с указанным кодом, но он дает ошибку, как

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' и создает' Process' с помощью 'ProcessBuilder'. Также разбивайте 'String arg' на' String [] args' для учета аргументов, которые сами содержат пробелы. 2) Нет необходимости добавлять основной тег в заголовок. –

+0

это просто не может найти файл. Измените '" powershell.exe "' на '' C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe "' – Cole9350

+0

Поблагодарите u @ Cole9350, проблема решена. – Sathiya

ответ

1

Переменные среды не всегда отображаются в java-компиляторе. Ваша ошибка стека просто говорит вам, что он не может найти исполняемый файл powershell, потому что он не знает автоматически искать в переменной $ PSHOME.

Исправление просто указать полный путь:
Изменение "powershell.exe" в "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"

0

Вы можете запустить команду PowerShell с помощью ProcessBuilder из Java.

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

Если исполняемый PowerShell IS на своем пути, то убедитесь, что вы случайно не имеете Use secret text(s) or file(s) выбраны с конкретным именем пользователя паролем учетных в разделе Build Environment. Я не уверен, почему, но это, похоже, вызывало эту проблему, когда мы строили наш раб!

Смежные вопросы