PowerShellと手動の方法を使用してJavaランタイムを確認、アンインストール、および更新する方法
WindowsマシンでJavaのバージョンを管理するのは、少々面倒な作業です。特に、Javaのバージョンが一致していなかったり、古いためにアプリが起動しない場合はなおさらです。このガイドでは、インストールされているJavaのバージョンを確認する方法、ネットワーク経由でリモートでその情報を取得する方法、そして残っている可能性のある古いバージョンを削除する方法について解説します。正直に言うと、これらの作業は、特にJavaScript経由で読み込まれるJava Webページに依存する新しいJavaインストーラーでは、時間がかかったり、少し複雑になったりすることがあります。しかし、コマンドとプロセスを理解することで、状況を適切に管理できるようになります。
Windows で Java バージョンを確認するにはどうすればいいですか?
ほとんどの人はjava -versionコマンドプロンプトで実行します。これは、インストールされているものを素早く確認する方法です。通常、次のような出力が表示されます。
java version "1.8.0_261" Java(TM) SE Runtime Environment (build 1.8.0_261-b12) Java HotSpot(TM) Client VM (build 25.261-b12, mixed mode, sharing)
それでもあまり情報が得られない場合、またはJavaがインストールされていない場合は、PATHにJavaがないか、そもそもインストールされていない可能性があります。ちなみに、Windows Searchを開いて「Java」と入力するか、コントロールパネル > プログラム > プログラムと機能 を確認すると、特にGUIのバージョン情報が必要な場合は、そこに何があるのかがわかります。
PowerShell を使用して Java バージョンを確認する
PowerShellは、特にキーボードを叩かずに複数のPCでJava情報を取得する必要がある場合に便利な方法です。以下のコマンドを実行してください。
Get-Command java | Select-Object -ExpandProperty Version
これにより、「1.8.0.261」のようなバージョン文字列が直接表示されます。ベンダー情報を含む詳細情報については、以下を参照してください。
Get-Command java | Select-Object -ExpandProperty "FileVersion"
インストールされているJavaに関するより詳細な情報を得るには、Windows Management Instrumentation(WMI)にクエリを実行できます。WMIはインストールされているプログラムからデータを取得するので、システム上のJavaのバージョンを正確に確認するのに便利です。
Get-WmiObject -Class Win32_Product -Filter "Name like '%Java%'"
Win32_Product のクエリは遅くなる場合があり、場合によってはアプリの再構成が必要になることに注意してください。少し奇妙ですが、Windows ではよくあることです。出力には、アップデートや自動アップデーターを含むすべての Java 関連製品がリストされます。メインの Java ランタイムだけをフィルタリングするには、次のコマンドを使用します。
Get-WmiObject -Class Win32_Product -Filter "Name like '%Java%' and not Name like '%Java Auto Updater%'" | Select-Object Name, Version
PowerShell – リモートコンピュータのJavaバージョンを確認する
大規模なネットワークやサーバーを管理する場合、PowerShell が真価を発揮します。適切な権限があれば、複数のリモートマシンから Java 情報を取得できます。各マシンに手動で SSH 接続する必要はありません。基本的な手順は以下のとおりです。
# List of computers; can be from a text file or manually entered $computers = @('server1', 'server2', 'server3') # Or, load from a file: # $computers = Get-Content -Path 'C:\Scripts\ServerList.txt' # Check Java versions remotely Get-WmiObject -Class Win32_Product -ComputerName $computers -Filter "Name like '%Java%' and not Name like '%Java Auto Updater%'" | Select-Object __Server, Name, Version
興味があれば、 RSATツールのGet-ADComputerを使ってドメインに参加しているコンピューターのリストを生成し、このスクリプトに入力できます。ただし、1つのドメインで約24種類のJavaバージョンが検出されたようです。これは少々異常ですが、通常、多くのアップデートがリリースされていることを考えると、驚くことではありません。
すべてのJavaバージョンをアンインストールするPowerShellスクリプト
新しいJavaをインストールする前に、古いバージョンのJavaを削除するのは賢明な選択です。特にJavaのライセンス体系と自動更新の仕組みが変更されたことで、安全性の低いJREや古いJREが大量に残ってしまうのは避けたいものです。リモートまたはローカルでJavaのインストールをすべて削除する方法をいくつかご紹介します。
まず、簡単な方法(ただし遅い)は、次のものを使用することです。
$jre_installed = Get-WmiObject -Class Win32_Product -Filter "Name like '%Java%'" $jre_installed | ForEach-Object { $_. Uninstall() }
これは確かに機能しますが、WMIベースのアンインストールは遅くなることがあります。より良い方法は、レジストリを調べて製品のGUIDを正確に見つけることです。そうすれば、アンインストールがより速く、よりクリーンになります。レジストリからアンインストール文字列を検索する簡単なスクリプトを以下に示します。
# Find all Java-related uninstall strings in registry $uninstallPaths64 = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" $uninstallPaths32 = "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" $javaKeys64 = Get-ChildItem -Path $uninstallPaths64 | Get-ItemProperty | Where-Object { $_. DisplayName -like "*Java*" } $javaKeys32 = Get-ChildItem -Path $uninstallPaths32 | Get-ItemProperty | Where-Object { $_. DisplayName -like "*Java*" } # Loop through 64-bit uninstall strings foreach ($key in $javaKeys64) { if ($key. UninstallString) { $uninstallCmd = $key. UninstallString -replace "/I", "/X" -replace "/i", "/x" Write-Output "Uninstalling: $($key. DisplayName)" start-process -FilePath "msiexec.exe" -ArgumentList "/X", "$uninstallCmd", "/qb" -Wait } } # Repeat for 32-bit foreach ($key in $javaKeys32) { if ($key. UninstallString) { $uninstallCmd = $key. UninstallString -replace "/I", "/X" -replace "/i", "/x" Write-Output "Uninstalling: $($key. DisplayName)" start-process -FilePath "msiexec.exe" -ArgumentList "/X", "$uninstallCmd", "/qb" -Wait } }
この方法では、すべてのJavaバージョンを検出し、GUIを表示せずにサイレントアンインストールを実行します。ただし、PowerShellは管理者として実行してください。リモートでアンインストールする場合は、適切な権限が必要です。
PowerShell を使用して Java JRE をダウンロードしてインストールする方法
最新のJavaインストーラーを入手して自動的にデプロイするのはなかなか良いのですが、最近はちょっと面倒です。通常は、ダウンロードスクリプトを作成し、サイレントフラグを付けてインストーラーを実行します。例えば、以下のようになります。
# Ensure TLS 1.2 is enabled for the download [Net. ServicePointManager]::SecurityProtocol = [Net. SecurityProtocolType]::Tls12 # URL of Java's online download page (which is now a problem since Oracle changed how the download links work) # You might need to get the direct link manually or parse the page, but that’s a pain # Here's a placeholder for an offline installer $installerPath = "C:\Temp\jre8.exe" # Example of download — but be aware, Oracle's website now heavily relies on JavaScript, making direct programmatic links tricky # So, you often have to manually download or use a known static link from Oracle's site # Download the offline installer from a trusted source (ex: a known URL) Invoke-WebRequest -Uri "https://download.oracle.com/otn-pub/java/jdk/8uXXX-bXX/jre-8uXXX-windows-x64.exe" -OutFile $installerPath # Run the installer silently, suppressing reboot Start-Process -FilePath "$installerPath" -ArgumentList "/s REBOOT=0" -Wait # Optional: clean up installer after install Remove-Item "$installerPath"
しかし実際には、Oracleがダウンロードリンクを動的に生成する方式に切り替えたことで、この自動化は困難になっています。ウェブサイトではJavaScriptを含むページが読み込まれることが多く、単純なスクリプトでは解析が難しいからです。そのため、多くのユーザーは手動でダウンロードするか、WinGetなどの管理パッケージマネージャを使用しています。WinGetを使えば、OpenJDKのバリアントをよりスムーズにインストールできます(WinGetなど)。
というわけで、このガイドがJavaのバージョン管理、整理、そしてネットワークのセキュリティ強化に役立つことを願っています。少し面倒ではありますが、コマンドの使い方さえ覚えてしまえば、WindowsでのJava管理が少し楽になります。