2011-11-16 161 views
12

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は、リモートセッションの作成とコマンドレットの実行を実行するpowershellスクリプトを呼び出しますか?

javaでpowershellスクリプトを呼び出すサポートはありますか?

誰でもこの点で助けてください。

あなたの回答を待っています。

おかげで、工程(runtime.exec())を開始した後 rammj

+0

あなたは例外を取得していると簡単にそれを行うことができますか? finally()ブロックにclose()メソッドがあるはずです。 –

+2

最初にお読みくださいhttp://kylecartmell.com/?p=9 – artbristol

答えて

8

、プロセスの入力ストリームを閉じるために、行を追加し(JAVAは!!出力ストリーム呼び出し):

proc.getOutputStream().close(); 
4

我々はいPowerShellスクリプトを使用してリモートセッションを作成し、コマンドレットを実行できます。

次パワーシェルスクリプトが

#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コードをtestscript.ps1に保存する:powerShellProcess.getErrorStream()代わりpowerShellProcess.getInputStream():あなたは出力が得られない場合は

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

は、これを試してみてください。エラーが表示されます。

4

今、あなたはjPowerShell

powerShell = PowerShell.openSession(); 

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

powerShell.close(); 
+0

複数の質問に対する回答をコピーアンドペーストするべきではありません。 –

関連する問題