我想编写一个java代码,它将使用powershell命令连接远程系统并在远程系统中执行java -version命令。有人可以帮我这个。
提前致谢:)
答案 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)\";}
我希望这会有所帮助。
干杯,克里斯。