Invoke Powershell scripts from Java Invoke Powershell scripts from Java powershell powershell

Invoke Powershell scripts from Java


After starting the process ( runtime.exec() ), add a line to close the input stream of the process ( which JAVA calls output stream!!):

 proc.getOutputStream().close();


Now you can do it easily with jPowerShell

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


Yes we can create remote session and execute cmdlets using powershell script.

Save the following Power shell script to testscript.ps1

 #Constant Variables$Office365AdminUsername="YOUR_USERNAME"$Office365AdminPassword="TOUR_PASSWORD"#MainFunction 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 errorsif ($Session -eq $null){    Write-Host : "Invalid creditials"}else{    Write-Host : "Login success"    #Import the session        Import-PSSession $Session}#To check folder sizeGet-MailboxFolderStatistics "YOUR_USER_NAME"  | Select Identity, FolderAndSubfolderSizeexit}# Start script. Main  

Java Code :

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

If you do not get output, try this: powerShellProcess.getErrorStream() instead powerShellProcess.getInputStream(). It will show the errors.