Как вызвать «файл скрипта Powershell» из Java в операционной системе Linux - PullRequest
0 голосов
/ 21 декабря 2018

Класс: -

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

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.Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 21 декабря 2018

Ваша проблема в том, что вы на самом деле не пытаетесь запустить 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.

0 голосов
/ 25 апреля 2019

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

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

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

0 голосов
/ 21 декабря 2018

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

для настройки FreeSSHD следуйте по этому URL-адресу http://www.techrepublic.com/blog/tr-dojo/set-up-a-free-ssh-server-on-windows-7-with-freesshd/. После установки вы можете подключить эту систему 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/

...