2016-02-17 5 views
-1

Я пытаюсь запустить команду powershell в eclipse со следующим кодом. Скрипт powershell отображает список установленных приложений в окнах. Скрипт отлично работает, когда он выполняется в powershell. Но я не могу получить вывод на консоли. Может кто-нибудь, пожалуйста, скажите мне, в чем проблема?Выполнение команды powershell в eclipse

import com.profesorfalken.jpowershell.PowerShell; 
import com.profesorfalken.jpowershell.PowerShellNotAvailableException; 
import com.profesorfalken.jpowershell.PowerShellResponse; 

public class TestProcessList { 

public static void main(String[] args) throws Exception { 

    try { 
     PowerShell powerShell = PowerShell.openSession(); 
     String command = "Get-ItemProperty " + 
       "HKLM:/Software/Wow6432Node/Microsoft/Windows/CurrentVersion/Uninstall/* " + 
       "| Select-Object DisplayName, DisplayVersion, Publisher, InstallDate " + 
       "| Format-Table –AutoSize"; 

     PowerShellResponse response = powerShell.executeCommand(command); 

     System.out.println("Proceses are:" + response.getCommandOutput()); 

     powerShell.close(); 

    } catch (PowerShellNotAvailableException ex) { 
     throw new RuntimeException("Failed to run PowerShell", ex); 
    } 

} 

}

+3

введите 'System.out.println' в свой блок' catch' и повторите попытку. –

+1

Никогда не выбрасывайте исключение. Вы всегда должны что-то делать, чтобы сообщить о проблеме. –

+0

Пробовал. Dint help –

ответ

1

Вероятно, выбрасываются некоторые исключения. Что в вашем случае не перебрасывается и потребляется (плохая практика). Изменить Лобовое поймать блок:

} catch (PowerShellNotAvailableException ex) { 
    throw new RuntimeException("Failed to run PowerShell", ex) 
} 

Тогда вы увидите, что пошло не так, в том числе весь его StackTrace и возможные причины.

UPDATE: Вы на самом деле используете командную команду («|» в строке команд выполнения) внутри одной команды. Это не будет работать, поскольку трубы не просто реализовать в java. Попробуйте решение базирование на следующем примере для команды «пс Окс | Grep Явы»:

import org.apache.commons.io.IOUtils; 

public static void main(String[] args) throws Exception 
{ 
    Process p1 = Runtime.getRuntime().exec(new String[] { "ps", "aux" }); 
    InputStream input = p1.getInputStream(); 
    Process p2 = Runtime.getRuntime().exec(new String[] { "grep", "java" }); 
    OutputStream output = p2.getOutputStream(); 
    IOUtils.copy(input, output); 
    output.close(); // signals grep to finish 
    List<String> result = IOUtils.readLines(p2.getInputStream()); 
    System.out.println(result); 
} 

Источник: https://stackoverflow.com/a/7226858/1688570

В API библиотеки PowerShell не известно мне, вы должны адаптировать пример для работы с библиотекой PowerShell.

+0

Я попробую это. Благодаря! –

0

Код С PowerShell.java класс.

int closingTime = 0; 

while (!closeTask.isDone() 
    && !closeTask.isDone()) { 
      if (closingTime > MAX_WAIT) { 
     Logger.getLogger(PowerShell.class.getName()).log(Level.SEVERE, "Unexpected error when closing PowerShell: TIMEOUT!"); 
     break; 
    } 
    Thread.sleep(WAIT_PAUSE); 
    closingTime += WAIT_PAUSE; 

и

static final int WAIT_PAUSE = 10; 
static final int MAX_WAIT = 2000; 

Это означает, что ваша команда занимает более 2000 миллисекунд, чтобы закрыть/полн. Я думаю, Добавление пользовательского сна в ваш код может помочь. Я не знаком с JPowerShell, вы должны взглянуть на класс PowerShell. или попробуйте ответить TouDick.

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