Как вызвать "файл сценария Powershell" из Java в операционной системе Linux

Класс:-

=====================

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

public class TestPowershell {
    public static void main(String[] args) throws IOException     
    {    
        Runtime runtime = Runtime.getRuntime();

        Process proc = runtime.exec("cmd powershell \"\\Test\\Powershell\\powershell.ps1\" ");

    proc.getOutputStream().close();

        InputStream is = proc.getInputStream();

        InputStreamReader isr = new InputStreamReader(is);

        BufferedReader reader = new BufferedReader(isr);

        String line;

        while ((line = reader.readLine()) != null)
        {
            System.out.println(line);
        }

        reader.close();

        proc.getOutputStream().close();

    }

}

Я пытаюсь выполнить файл powershell, используя java в среде Linux, я получаю исключения (выше я прикрепил класс и исключения), любезно предоставьте мне тестовый класс, который может выполнять файл сценария PowerShell в Linux. заранее спасибо

Я пытаюсь выполнить файл powershell, используя java в среде Linux, я получаю исключения (выше я прикрепил класс и исключения), любезно предоставьте мне тестовый класс, который может выполнять файл сценария PowerShell в Linux. заранее спасибо

kishore k 21.12.2018 15:20

Возможно, вы захотите добавить это в качестве предисловия к своему вопросу :)

Aaron 21.12.2018 15:22

Я тоже пробовал ваш пример, но он показывает только то же самое, Исключение в потоке «main» java.io.IOException: не удается запустить программу «powershell»: error = 2, Нет такого файла или каталога

kishore k 21.12.2018 15:26

Подождите, я только что заметил часть «в среде Linux»; Я бы не ожидал, что в вашей ОС будет установлена ​​реализация PowerShell. Будет ли что-нибудь делать ввод powershell в оболочке Linux? Я ожидаю, что это просто поднимет command not found, который вы сейчас получаете. То же и с cmd.

Aaron 21.12.2018 15:27
Этот вопрос предоставляет способ выполнять сценарии PowerShell в среде Linux, это может быть то, что вы ищете.
Aaron 21.12.2018 15:29

Да @Aaron, у меня есть еще одно сомнение, ваш код работал "Host" как локальный в ОС Windows? а ваш код работал в среде "AWS"? Направляйте меня, если есть идеи !!!

kishore k 21.12.2018 15:30

Не уверен, какой код вы имеете в виду, ответ ниже не мой. Что должен делать код PowerShell? В зависимости от ответа вы можете 1) записать его на Java (будет переносимым, может быть невозможно, если его действие связано с ОС), 2) написать bash (или другую оболочку Linux), эквивалентную вашему сценарию PowerShell (может сделать Материал ОС в обеих ОС, но требует вдвое больше работы и обслуживания) или 3) использовать способ выполнения вашего сценария PowerShell под Linux

Aaron 21.12.2018 15:36

@kishorek Пожалуйста, отредактируйте вопрос и включите свои комментарии в текст вопроса.

Giacomo Alzetta 21.12.2018 15:46

@GiacomoAlzetta сейчас в порядке ???

kishore k 21.12.2018 15:52

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

VGR 21.12.2018 16:27
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
10
848
3

Ответы 3

Сначала загрузите FreeSSHD http://www.freesshd.com/?ctt=download в свой Windows (сервер). убедитесь, что запускаете его от имени администратора.

для установки FreeSSHD следуйте этому URL-адресу http://www.techrepublic.com/blog/tr-dojo/set-up-a-free-ssh-server-on-windows-7-with-freesshd/. После установки вы можете использовать ssh для этой системы Windows из Linux или с помощью putty.

для выполнения сценария PowerShell из Linux в удаленную систему Windows с использованием Java

package com.sysvana.router.config;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
public class Test {
static String hostname = "10.1.10.60";
static String username = "administrator";
static String password = "P@ssw0rd"; 
public static void main(String[] args) throws IOException {
Connection conn = new Connection(hostname);
conn.connect();
boolean isAuthenticated = conn.authenticateWithPassword (username, password);
if (isAuthenticated == false){
System.out.println("authentication failed");
} 
System.out.println(isAuthenticated);
Session sess = conn.openSession (); 
sess.execCommand ("powershell C:/Users/Administrator/Desktop/test.ps1"); 
InputStream stdout = new StreamGobbler (sess.getStdout ()); 
BufferedReader br = new BufferedReader (new InputStreamReader (stdout));
while (true)
{
String line = br.readLine ();
if (line == null) break;
System.out.println (line);
}
System.out.println ("Exit code" + sess.getExitStatus ());
sess.close ();
conn.close ();
}
}

использовать Ganymed SSH-2 jar http://www.ganymed.ethz.ch/ssh2/

Это полезно для выполнения сценария PowerShell на удаленных машинах, но немного избыточно для решения проблемы OP (ему нужно только выполнить локальные сценарии PS AFAICT)

Aaron 21.12.2018 15:25

Ваша проблема в том, что вы на самом деле не пытаетесь запустить PowerShell. Вы используете это:

runtime.exec("cmd powershell \"\\Test\\Powershell\\powershell.ps1\" ")

это означает, что он пытается запустить файл с именем cmd, который не является частью Linux.

Кроме того, в другой части кода вы пытаетесь запустить powershell.exe. Обычно программы Linux не имеют расширения .exe. Возможно, вы перенесли свое Java-приложение из Windows, но вы должны знать, что Linux отличается. Он не входит в стандартную комплектацию Powershell и не использует расширение файла .exe.

Вы можете установить PowerShell по адресу https://github.com/PowerShell/PowerShell.

В Linux PowerShell (после установки, указанной выше) вызывается с помощью команды pwsh. Вам нужно будет соответствующим образом изменить свою программу Java.

Спасибо за все ваши ответы.

Наконец, я узнал, что при работе с PowerShell мы должны запускать скрипт в ОС Windows только потому, что Microsoft является владельцем PowerShell, и они предоставляют больше возможностей в ОС Windows.

Я запустил сценарий в ОС Windows и создал файл CSV и сохранил его в папке SFTP. Используя java, я загрузил свой файл и обработал следующий процесс.

Другие вопросы по теме