2015-01-22 5 views
0

Я хочу написать программу java для получения статуса всех служб, работающих на разных серверах (около 20). Для этого я использую команду SC, я могу сделать это с помощью java-программы. Но теперь я застрял в ситуации, когда я хочу запустить команду SC как другой пользователь с помощью RUNAS, проблема, с которой я столкнулся, заключается в том, что я не могу ввести пароль после того, как команда была выполнена в первый раз , Ниже приведен код, который я использую: -Как ввести пароль при выполнении cmd через java

 String[] command = new String[3]; 
     command[0] = "cmd"; 
     command[1] = "/c"; 
     command[2] = "runas /noprofile /user:domain\\admin \"sc \\\\serverName queryex type= service state= all\""; 

     Process p = Runtime.getRuntime().exec(command); 

     PrintWriter writer = new PrintWriter(new OutputStreamWriter(new BufferedOutputStream(p.getOutputStream())), true); 

     BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 
     String line = reader.readLine(); 

     while (line != null) { 

      new PrintWriter(p.getOutputStream(),true).println("AdminPassword"); 

      System.out.println(line); 
      line = reader.readLine(); 
     } 

     BufferedReader stdInput = new BufferedReader(newInputStreamReader(p.getInputStream())); 

     BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); 

     String Input; 
     while ((Input = stdInput.readLine()) != null) { 
      System.out.println(Input); 
     }    

     String Error; 
     while ((Error = stdError.readLine()) != null) { 
      System.out.println(Error); 
     } 

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

Любая помощь по этому вопросу?

Благодаря

+0

проблема безопасности может повлиять на вас, вероятно, большинство ответов здесь: если вы предоставить учетные данные через командную строку, они могут быть доступны в виде простого текста при просмотре списков процессов с диспетчером задач или что-то подобное. – mschenk74

ответ

0

В вашем while (line != null) цикле вы открываете новый PrintWriter для каждой строки вы читаете. Вы печатаете пароль администратора этим авторам, но никогда не закрываете и не замаскируете их.

Попробуйте созданный вами PrintWriter writer и flush() его после записи пароля, иначе он все равно будет в буфере.

Вы также создаете несколько BufferedReader на входном потоке процесса, который может мешать друг другу.

Итак: создайте только один считыватель соответственно. писатель для вводаStream, errorStream и outputStream процесса.

+0

Привет, Thomos, спасибо за ответ, я взял код сценариста вне цикла (до) и сделал флеш и закрыл, но все тот же результат. –

-1

с помощью java.io.Console упаковки вы можете прочитать пароль. Пожалуйста, используйте ниже код для чтения пароль от CMD оперативного

Console c = System.console(); String login = c.readLine("Enter your login: "); char [] password= c.readPassword("Enter your password: ");

+1

Вопрос в том, как ввести пароль в другую программу из java, а не как читать пароль из java. – mschenk74

+0

есть ли какой-нибудь способ достичь этих парней? –

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

  • Нет связанных вопросов^_^