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.