如何使用Java代码查找执行powershell命令的Java版远程Windows系统?

时间:2014-07-09 07:25:51

标签: java powershell-v2.0

我想编写一个java代码,它将使用powershell命令连接远程系统并在远程系统中执行java -version命令。有人可以帮我这个。

提前致谢:)

1 个答案:

答案 0 :(得分:1)

您是否尝试过使用Invoke-Command而不是Enter-PSSession?

在对PowerShell进行一些测试并调整它以获得返回值之后,我必须得到以下代码。

$pw = convertto-securestring -AsPlainText -Force -String "Password"
$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist "Domain\User",$pw
$session = New-PSSession -ComputerName Computer -Credential $cred
Invoke-Command -Session $session -ScriptBlock { return "$(&java -Xms256m -Xmx256m -version 2>&1)";}

我必须通过Invoke-Command传递内存配置,因为远程java通过WinRM似乎尝试填充的内存比可用内存多。我还必须重定向错误输出(2>& 1),因为来自-version调用的返回被PowerShell选为Error。

我想你的Java会读到这样的东西:

runtimeProcess = Runtime.getRuntime().exec(new String[] {"powershell.exe", "/c","$pw = convertto-securestring -AsPlainText -Force -String \""+password+"\"; $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist \""+domain+"\\"+user+"\""+",$pw"+ "; $session = new-pssession -computername \""+host+"\" -credential $cred"+ "; Invoke-Command -Session $session -ScriptBlock { return \"$(&java -Xms256m -Xmx256m -version 2>&1)\";}

设置Shell内存:

Set-Item WSMan:\localhost\Shell\MaxMemoryPerShellMB 2048

如上所述配置凭据后,远程设置Shell内存:

Invoke-Command -Session $session -ScriptBlock { Set-Item WSMan:\localhost\Shell\MaxMemoryPerShellMB 2048 }

您也可以尝试使用较低的-Xmx或-Xms值运行它,尽管java可能无法在较低内存环境中加载。

runtimeProcess = Runtime.getRuntime().exec(new String[] {"powershell.exe", "/c","$pw = convertto-securestring -AsPlainText -Force -String \""+password+"\"; $cred = new-object -typename System.Management.Automation.PSCredential -argumentlist \""+domain+"\\"+user+"\""+",$pw"+ "; $session = new-pssession -computername \""+host+"\" -credential $cred"+ "; Invoke-Command -Session $session -ScriptBlock { return \"$(&java -Xms16m -Xmx64m -version 2>&1)\";}

我希望这会有所帮助。

干杯,克里斯。