从Java调用Powershell脚本

我想从java调用我的powershell脚本。 能做到吗? 我尝试使用以下代码,但流未关闭。

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是否调用执行创建远程会话和执行cmdlet的powershell脚本?

我们是否支持在java中调用powershell脚本?

任何人都可以请你帮忙。

等待您的回复。

谢谢,rammj

在启动进程( runtime.exec() )之后,添加一行来关闭进程的输入流(JAVA调用输出流!!):

  proc.getOutputStream().close(); 

是的,我们可以使用powershell脚本创建远程会话和执行cmdlet。

将以下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() 。 它会显示错误。

现在,您可以使用jPowerShell轻松完成

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