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

如何使用Java代码查找执行powershell命令的远程windows系统的Java版本?,java,powershell-2.0,Java,Powershell 2.0,我想写一个java代码,它将使用powershell命令连接远程系统,并在远程系统中执行java-version命令。有人能帮我一下吗 提前感谢:)您是否尝试使用Invoke命令而不是Enter-PSSession 在对PowerShell进行了一些测试并对其进行了一些调整以获得返回值之后,我不得不以以下代码结束 $pw = convertto-securestring -AsPlainText -Force -String "Password" $cred = new-object -type

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


提前感谢:)

您是否尝试使用Invoke命令而不是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命令传递内存配置,因为通过WinRM的远程java似乎试图填充比可用内存更多的内存。我还必须重定向错误输出(2>&1),因为PowerShell将-version调用的返回作为错误接收

我想您的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)\";}
要设置外壳内存,请执行以下操作:

Set-Item WSMan:\localhost\Shell\MaxMemoryPerShellMB 2048
要在按上述方式配置凭据后远程设置外壳内存,请执行以下操作:

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)\";}
我希望这有帮助


干杯,克里斯。

runtimeProcess=Runtime.getRuntime().exec(新字符串[]{“powershell.exe”、“/c”、“$pw=convertto-securestring-AsPlainText-Force-String”+密码+”;$cred=新对象-typename System.Management.Automation.PSCredential-argumentlist\+domain+“\\\\”+用户+“,$pw”+“;$session=new pssession-computername\”+host+“\”-credential$cred“+”;输入pssession-computername\”+host+“\”-credential$cred;java-version“})我正在使用它,但它显示了本地系统的java版本。嗨,Chris,谢谢你的回答。我在执行此代码时遇到以下错误:VM初始化期间发生的错误无法为对象保留足够的空间。heapI在某些方面提到了-Xms和-Xmx部分,但你可能还需要增加内存远程Powershell外壳的大小。例如:
Set Item WSMan:\localhost\Shell\maxmorypershellmb 1024
或:
Set Item WSMan:\localhost\Shell\maxmorypershellmb 2048
您应该能够通过经过身份验证的外壳运行此操作(如Invoke命令)假设您有管理凭据。您可以尝试降低XmX和Xms值,以使java停止为Shell分配太多堆来处理。您也可以尝试-Xmx64m和-Xms64m,并希望它能够运行。