Вызов сценариев Powershell из Java - PullRequest
12 голосов
/ 16 ноября 2011

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

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("powershell C:\\testscript.ps1");
        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();
    }

}

Вызывает ли java сценарий powershell, который выполняет создание удаленного сеанса и выполнение командлетов?

Есть ли у нас поддержка для вызова сценариев powershell в java?

Кто-нибудь может вамПожалуйста, помогите в этом.

Жду ваших ответов.

Спасибо, rammj

Ответы [ 3 ]

8 голосов
/ 17 ноября 2011

После запуска процесса (runtime.exec()) добавьте строку, чтобы закрыть входной поток процесса (который JAVA называет выходным потоком !!):

 proc.getOutputStream().close();
4 голосов
/ 16 января 2016

Теперь вы можете сделать это легко с jPowerShell

powerShell = PowerShell.openSession();

//Print results    
System.out.println(powerShell.executeScript("\"C:\\testscript.ps1\"").getCommandOutput());

powerShell.close();
4 голосов
/ 23 января 2013

Да, мы можем создать удаленный сеанс и выполнить командлеты, используя скрипт powershell.

Сохраните следующий сценарий Power shell в testscript.ps1

 #Constant Variables
$Office365AdminUsername="YOUR_USERNAME"
$Office365AdminPassword="TOUR_PASSWORD"

#Main
Function Main {
#Remove all existing Powershell sessions
    Get-PSSession | Remove-PSSession

#Encrypt password for transmission to Office365
    $SecureOffice365Password = ConvertTo-SecureString -AsPlainText $Office365AdminPassword -Force


#Build credentials object
    $Office365Credentials  = New-Object System.Management.Automation.PSCredential $Office365AdminUsername, $SecureOffice365Password 
Write-Host : "Credentials object created"

#Create remote Powershell session
    $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell -Credential $Office365credentials -Authentication Basic –AllowRedirection  
Write-Host : "Remote session established"

#Check for errors
if ($Session -eq $null){
    Write-Host : "Invalid creditials"
}else{
    Write-Host : "Login success"
    #Import the session
        Import-PSSession $Session
}

#To check folder size
Get-MailboxFolderStatistics "YOUR_USER_NAME"  | Select Identity, FolderAndSubfolderSize

exit
}

# Start script
. Main  

Java-код:

try {
            String command = "powershell.exe \"C:\\testscript.ps1\"";
            ExecuteWatchdog watchdog = new ExecuteWatchdog(20000);
            Process powerShellProcess = Runtime.getRuntime().exec(command);
            if (watchdog != null) {
                watchdog.start(powerShellProcess);
            }
            BufferedReader stdInput = new BufferedReader(new InputStreamReader(powerShellProcess.getInputStream()));
            String line;
            System.out.println("Output :");
            while ((line = stdInput.readLine()) != null) {
                System.out.println(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

Если вы не получаете вывод, попробуйте это: powerShellProcess.getErrorStream() вместо powerShellProcess.getInputStream(). Это покажет ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...