3

リモート マシンで資格情報を使用して呼び出しコマンドを使用して、そのマシンの Java バージョンを含む文字列を返すコードを実行するスクリプトをPowerShellで作成しようとしています。Java がインストールされていません。サーバーにJDKフォルダーとしてドロップされ、アプリケーションがその場所を指している場合もあります。残念ながら、レジストリを使用して Java のバージョンを見つけることはできません。私が思いついた唯一のアイデアは、呼び出しコマンド内から次の行に沿って何かを呼び出すことです。

& "path_to_java.exe" "-version"

または、さらに複雑な場合は、正規表現を使用してバージョンを見つけます。

start-process $java -ArgumentList "-version" -NoNewWindow -Wait -RedirectStandardError "$path\tempoutput.txt"
$javaversionoutput = gc "$path\tempoutput.txt"
del "$path\tempoutput.txt"

ただし、一部のサーバーでは、その Java バージョンのコマンドを実行するのに十分なヒープ領域がないという問題が発生し続けています (そのリモート サーバーの呼び出しコマンドを使用)。

Error occurred during initialization of VM
Could not reserve enough space for object heap
D:\Java\jdk1.6.0_39\bin\java.exe
Could not create the Java virtual machine.
+ CategoryInfo          : NotSpecified: (Could not creat...irtual machine.:String) [],     RemoteException
+ FullyQualifiedErrorId : NativeCommandError
+ PSComputerName        : <server>

私の調査によると、リモート PowerShell セッション用に設定された MaxMemoryPerShellMB に関係しています。150 に設定されているサーバーもあれば、1024 に設定されているサーバーもあります。したがって、PowerShell リモート セッションから正常java -versionに実行できる場合と、メモリが少なすぎるために実行できない場合があります。ログインして手動でリモートマシンに設定した場合:

winrm set winrm/config/winrs '@{MaxMemoryPerShellMB="1000"}

それは働き始めます。しかし、毎回各サーバーに行って手動で設定することはできません。Invoke コマンドを使用して MaxMemoryPerShellMB を設定しようとすると、同じアカウントを使用してサーバー上の MaxMemoryPerShellMB を変更できますが、ログインして直接変更すると、アクセス権がないと表示されます。

解決策が不足しているように感じ、ここで助けを見つけたいと思っていました。これに関するトピックがあった場合は申し訳ありませんが、3 つしか見つかりませんでしたが、どれも私の質問に答えてくれませんでした。以下、興味のある方は参考にしてください。私が見つけることができるものは本当に何もありません:P

4

3 に答える 3

0

これは問題なく動作するはずです

gc "D:\serverlists\serverlist.txt" | foreach {  
[system.diagnostics.fileversioninfo]::GetVersionInfo("\\$_\c$\Program Files\Java\jre6\bin\java.exe"); }
于 2015-09-03T06:46:45.810 に答える