【PowerShell】WindowsでJavaのバージョンを確認・更新する方法を徹底解説
Java Runtime Environment(JRE)は、ユーザーのパソコン上でさまざまなエンタープライズ向けJavaアプリケーションを実行するために広く利用されています。しかし、アプリケーションによっては特定のJavaバージョンが必須であり、異なるバージョンでは正しく動作しないことがあります。本記事では、ネットワーク上のコンピューターにインストールされているJavaのバージョンを確認する方法と、PowerShellを使ってJREをアンインストール・アップデートする方法を詳しく解説します。
WindowsでJavaのバージョンを確認する方法
最も手軽な方法は、Windows 10の検索ボックスに「java」と入力し、Javaアプレットを実行することです。
About Java(Javaについて)ウィンドウに、現在インストールされているJREのバージョンが表示されます。例えば「Java Version 8 Update 261 (build 1.8.0_261-b12)」のように表示されます。ここでビルド番号に注目してください。すべてのJavaバージョンは先頭に「1」が付き、その後にメジャーバージョン番号(この例では8)、続いてアップデート番号が表記される構成になっています。
また、「プログラムと機能」(Win+R → appwiz.cpl)からも現在のJavaバージョンを確認できます。
コマンドプロンプトで確認する場合は、cmd.exeを起動して以下のコマンドを実行します。
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)
PowerShellでJavaのバージョンを確認する
PowerShellでもインストール済みのJavaバージョンを確認できます。実行ファイルjava.exeのバージョン情報を参照するだけでOKです(JRE SEのインストール時に環境変数へパスが設定されます)。以下のコマンドでJavaのファイルバージョンを表示できます。
Get-Command Java | Select-Object Version
より詳細な情報(メジャー・マイナー・ビルド・リビジョン番号)を取得したい場合は、次のコマンドを使用します。
Get-Command java | Select-Object -ExpandProperty Version
Major Minor Build Revision ----- ----- ----- -------- 8 0 2610 12
スクリプト内で文字列としてJavaバージョンを扱いたい場合は、以下のように記述します。
(Get-Command java | Select-Object -ExpandProperty Version).tostring()
さらに、WMIクラス「Win32_Product」(Windowsにインストールされたプログラムの一覧を保持)経由でもJavaのバージョンを調べられます。
Get-WmiObject -Class Win32_Product -Filter "Name like '%Java%'"
IdentifyingNumber : {26A24AE4-039D-4CA4-87B4-2F32180261F0}
Name : Java 8 Update 261
Vendor : Oracle Corporation
Version : 8.0.2610.12
Caption : Java 8 Update 261
IdentifyingNumber : {4A03706F-666A-4037-7777-5F2748764D10}
Name : Java Auto Updater
Vendor : Oracle Corporation
Version : 2.8.261.12
Caption : Java Auto Updaterここで取得したIDは、後ほどJREを正しくアンインストールする際に役立ちます。「Java Auto Updater」を除外してJava本体のバージョンのみ表示したい場合は、次のコマンドを使います。
Get-WmiObject -Class Win32_Product -Filter "Name like '%Java%' and not Name like '%Java Auto Updater%'" | Select -Expand Version
PowerShellでリモートコンピューターのJavaバージョンを一括確認する
ドメイン内のすべてのコンピューターやサーバーで使用されているJavaのバージョンを把握したい場合は、以下のPowerShellスクリプトが便利です。サーバー名を手動で指定しても、テキストファイルから読み込んでも構いません。また、RSAT-AD-PowerShellモジュールのGet-ADComputerコマンドレットを使えば、Active Directoryからサーバーやコンピューターの一覧を自動取得することも可能です。
# リモートコンピューターのJava SE (JRE) バージョンを確認するPowerShellスクリプト
# コンピューター名リストを直接指定する場合
# $computers = @('mun-sql01,mun-fs01,mun-sql02')
# テキストファイルからサーバーリストを読み込む場合
# $computers = Get-content C:\PS\ServerList.txt
# ADドメイン内のすべてのWindows Serverを対象にする場合
$computers = ((get-adcomputer -Filter { enabled -eq "true" -and OperatingSystem -Like '*Windows Server*' }).name).tostring()
Get-WmiObject -Class Win32_Product -ComputerName $computers -Filter "Name like '%Java%' and not Name like '%Java Auto Updater%'" | Select __Server, Version実行結果として、コンピューター/サーバー名とそれぞれにインストールされたJavaバージョンの対応表が出力されます。実際にドメイン内のコンピューターを調査したところ、なんと24種類もの異なるJREバージョンが混在しているケースがありました。このように環境の実態を可視化することは、セキュリティ管理の第一歩です。
PowerShellスクリプトですべてのJavaバージョンをアンインストールする
なぜ古いJavaバージョンを削除する必要があるのでしょうか?主な理由は以下の通りです。
- セキュリティ対策のため:新しいJavaをインストールする前に、以前のバージョンはすべて削除するのが望ましいです。他のソフトウェアと同様、Javaにも新機能の追加とともに重大な脆弱性(ゼロデイ攻撃を含む)への修正パッチが継続的に提供されています。古いバージョンが残っていると、既知の脆弱性やゼロデイ脆弱性を悪用されるリスクが高まります。Javaには自動アップデート機構が組み込まれていますが、ドメイン環境では管理者の判断で無効化されていることも少なくありません。
- ライセンスポリシーの変更:2019年、OracleはJavaのライセンス方針を変更しました。それ以降のOracle JDK(Java SE)を利用するには有料サブスクリプションが必要です。対象は2019年4月16日以降にリリースされたすべてのJava JRE(Java 8 SE Update 211以降)です。商用版Java SEは長期サポート(リリースから5年間のアップデート提供)が付きます。一方、無料で使えるのはGPLライセンスのOpen JDKですが、こちらは約半年ごとの更新が必要で、Windows向けの便利なインストーラーが用意されていない点が難点です。手動でのダウンロード・インストールが必要ですが、Chocolateyパッケージマネージャーを使えば
choco install openjdkというコマンド一つで導入できるのでおすすめです。
ローカルコンピューターからインストール済みの全Javaバージョンを削除するには、以下のPowerShellスクリプトが使えます。
$jre_installed = Get-WmiObject -Class Win32_Product -Filter "Name like '%Java%'" $jre_installed.Uninstall()
ただし、このWMIベースのコマンドは動作が非常に遅いという欠点があります。
そこで代わりに、レジストリからインストール済みJavaの一覧を取得し、MSIインストール時に生成されたプロダクトGUIDを指定してアンインストールする方法が効率的です。
# コンピューター上のすべてのJava SE (JRE) をアンインストールするPowerShellスクリプト
$uninstall32 = gci "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" | foreach { gp $_.PSPath } | ? { $_ -like "*Java*" } | select UninstallString
$uninstall64 = gci "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" | foreach { gp $_.PSPath } | ? { $_ -like "*Java*" } | select UninstallString
# 64ビット版Javaのアンインストール
if ($uninstall64) {
$uninstall64 = $uninstall64.UninstallString -Replace "msiexec.exe", "" -Replace "/I", "" -Replace "/X", ""
$uninstall64 = $uninstall64.Trim()
Write "Uninstalling Java ..."
start-process "msiexec.exe" -arg "/X $uninstall64 /qb" -Wait
}
# 32ビット版Javaのアンインストール
if ($uninstall32) {
$uninstall32 = $uninstall32.UninstallString -Replace "msiexec.exe","" -Replace "/I","" -Replace "/X",""
$uninstall32 = $uninstall32.Trim()
Write "Uninstalling all Java SE versions..."
start-process "msiexec.exe" -arg "/X $uninstall32 /qb" -Wait
}PowerShellでJava JREをダウンロード・インストールする方法
次のPowerShellスクリプトは、公式サイトから最新版のJavaインストーラーを自動的にダウンロードし、コンピューターにインストールします(オンライン/オフラインどちらのインストーラーにも対応)。インストール時には再起動要求の抑制と、Java自動アップデートの無効化を行います。
WebサイトからファイルをダウンロードするにはInvoke-WebRequestコマンドレットを使用します。プロキシ環境下にある場合は、事前にPowerShellがプロキシサーバー経由でインターネットにアクセスできるよう設定しておいてください。
# 最新版Java SE (JRE) を自動ダウンロード&インストールするPowerShellスクリプト
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
# オンラインインストーラーをダウンロードする場合
$URL = (Invoke-WebRequest -UseBasicParsing https://www.java.com/en/download/manual.jsp).Content | % { [regex]::matches($_, '(?:<a title="Download Java software for Windows Online" href=")(.*)(?:">)').Groups[1].Value }
# オフラインインストーラーをダウンロードする場合
#$URL = (Invoke-WebRequest -UseBasicParsing https://www.java.com/en/download/manual.jsp).Content | % { [regex]::matches($_, '(?:<a title="Download Java software for Windows Offline" href=")(.*)(?:">)').Groups[1].Value }
Invoke-WebRequest -UseBasicParsing -OutFile jre8.exe $URL
Start-Process .\jre8.exe '/s REBOOT=0 SPONSORS=0 AUTO_UPDATE=0' -wait
echo $?スクリプト冒頭の行はTLS 1.2を有効化するために追加しています。これがないと以下のようなエラーが発生しました。
Invoke-WebRequest: The request was aborted: Could not create SSL/TLS secure channel.
このスクリプトを実行すると、Javaのインストールファイルが自動的にダウンロードされ、jre8.exeとしてディスクに保存された後、インストールが開始されます。
注意:残念ながら、Oracle公式サイトからこの方法でJREセットアップファイルのURLを取得する手法は、最近動作しなくなりました。現在このページはJavaScriptによって動的に生成されており、インストーラーへのリンクを直接抽出できません。Oracle側の仕様変更により今後改善される可能性もありますので、うまくいかない場合は公式サイトから手動でダウンロードするか、Chocolateyなどのパッケージマネージャーの利用を検討してください。
-
Windows 11でPowerShellを更新する3つの方法【初心者向け完全ガイド】
Windowsオペレーティングシステムを常に最新のソフトウェアとセキュリティアップデートの状態に保つことは、パソコンを快適に維持するために欠かせません。特にWindows 11は、以前のバージョンよりもセキュリティが強化されて設計されていますが、だからといってセキュリティ上の問題が一切起こらないわけではありません。OSを最新の状態に保てば、Microsoftが提供する新機能や新しい能力にもいち早くアクセスできるようになります。 当ブログを定期的にお読みの方なら、ソフトウェアの更新とパッチ適用の重要性はすでにご存じかもしれません。通常、これは最新のOSアップデート、サードパーティ製ソフトウェアの
-
Windows 11 PCのアップデート方法を徹底解説!知っておきたい5つの手順
MicrosoftはWindows 11 OSに新機能を継続的に追加しており、ユーザーにはできるだけ早くPCをアップデートすることを推奨しています。最新リリースには、エクスプローラーのタブ機能やクイック設定のBluetoothメニューなど、数多くの新機能が含まれています。Microsoftの最新デスクトップOSを使うのは、今まさにエキサイティングなタイミングだと言えるでしょう。そこで本記事では、「Windows 11を最新ビルドにアップデートすべきか迷っている」という方に向けて、制限なく実行できる複数の簡単な方法をご紹介します。ぜひこのガイドを参考に、Windows 11のアップデート方法をチ