PowerShell:偵測Java最新版本置換檔案
會有這支小程式這個起因是因為有個我覺得很神奇的廠商寫的程式,用了批次檔指定了Java.exe的執行路徑來跑某些程式功能。
其實如果Java版本都不會自動更新倒也沒甚麼困擾。
但是由於我們的總部常常會自動派送一些更新檔近來執行/安裝
以至於如果Java一被更新版本就會造成廠商寫的程式某部分功能失靈。
所以我的需求就是執行PS之後自動檢查Java裝在電腦的裡的最新版本,然後自動置換。
由於公司內存在兩種版本OS:Windows 7 x86和Windows 10 X64。
所以這也會造成Java安裝位置路徑不同。
偵測OS的部分,我用這一行程式碼
[cc lang=”powershell”]
(Get-CimInstance win32_OperatingSystem).version)
[/cc]
然後其實我只需要取小數點最前位數
Windows 7是 6.X開頭的
Windows 10 是10.X開頭的
[cc lang=”powershell”]
$OS = ((Get-CimInstance win32_OperatingSystem).version).split(“.”,2)[-2]
[/cc]
由於Windows 7偵測到版本會是6.3開頭,取得文字字串會是6,為了避免未來要置換的檔案命名困擾
我另外在判斷式裡面給了$OSver版本編號的變數。下面是Windows 10為例。
[cc lang=”powershell”]
[String]$OSver = “10”
[/cc]
用下面這一行去讀取機碼裡面最新的Java版本
[cc lang=”powershell”]
$javaver= dir “HKLM:\SOFTWARE\WOW6432Node\JavaSoft\Java Runtime Environment” | select -expa pschildname -Last 1
[/cc]
用下面這一行讀取JavaHome確認位置,純粹是讀出來之後顯示給User看的,沒有太多作用可有可無。
[cc lang=”powershell”]
$Javaexpath = (Get-ItemProperty -path “HKLM:\SOFTWARE\WOW6432Node\JavaSoft\Java Runtime Environment\$Javaver\” -Name JavaHome).JavaHome
[/cc]
告訴User目前OS版本、Java版本、Java路徑以及即將置換的Bat檔
當然這些批次檔要已經事先複製在本機或安排好放在某個Share Folder
例如:
AAA-7-1.8.0_141.bat
AAA-10-1.8.0_131.bat
[cc lang=”powershell”]
Write-host “Your OperatingSystem is Windows 10 X64”
Write-Host “Your Java Version is $javaver”
Write-Host “Your Java path in $Javaexpath\bin”
Write-Host “Replace your PlugInHandler.bat with PlugInHandler-$OSver-$Javaver.bat.”
[/cc]
正式置換檔案
[cc lang=”powershell”]
Copy-Item -Path D:\ABC\DEF\UUU-$OSver-$Javaver.bat -Destination D:\ABC\DEF\UUU.bat -Force
[/cc]
其實這只是個很簡單的程式,是因為我的懶惰一直用滑鼠點很煩
下面是整段程式碼:
[cc lang=”powershell”]
[String]$OS = ((Get-CimInstance win32_OperatingSystem).version).split(“.”,2)[-2]
[String]$Waitkey = “Press Enter to exit:::”
Switch($OS)
{
10
{
[String]$OSver = “10”
Write-host “Your OperatingSystem is Windows 10 X64”
$javaver= dir “HKLM:\SOFTWARE\WOW6432Node\JavaSoft\Java Runtime Environment” | select -expa pschildname -Last 1
$Javaexpath = (Get-ItemProperty -path “HKLM:\SOFTWARE\WOW6432Node\JavaSoft\Java Runtime Environment\$Javaver\” -Name JavaHome).JavaHome
}
6
{
[String]$OSver = “7”
Write-host “Your OperatingSystem is Windows 7 X86”
$javaver= dir “HKLM:\SOFTWARE\JavaSoft\Java Runtime Environment” | select -expa pschildname -Last 1
$Javaexpath = (Get-ItemProperty -path “HKLM:\SOFTWARE\JavaSoft\Java Runtime Environment\$Javaver\” -Name JavaHome).JavaHome
}
}
Write-Host “Your Java Version is $javaver”
Write-Host “Your Java path in $Javaexpath\bin”
Write-Host “Replace your PlugInHandler.bat with PlugInHandler-$OSver-$Javaver.bat.”
Copy-Item -Path D:\ABC\DEF\UUU-$OS-$Javaver.bat -Destination D:\ABC\DEF\UUU.bat -Force
Read-Host $Waitkey
[/cc]