リモート マシンで資格情報を使用して呼び出しコマンドを使用して、そのマシンの 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