Nano Hash - криптовалюты, майнинг, программирование

Как ввести пароль при выполнении cmd через java

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

        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);
        }

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

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

Спасибо

22.01.2015

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

Ответы:


1

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

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

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

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

22.01.2015
  • Привет, Томос, спасибо за ответ, я взял код принтера за пределы цикла (до этого) и сделал сброс и закрытие, но все равно тот же результат. 22.01.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..