摘要:尤其是對于那些不太懂電腦的人來說,配置環境變量簡直要命了。我的想法很簡單,這個腳本應該在安裝程序執行完畢調用,從注冊表獲取的安裝位置,然后自動完成環境變量的配置。
本來想把這篇的內容包括在我的Powershell系列文章之內的,后來寫完之后才想起來,這時候我已經復制粘貼到簡書、CSDN和SegmentFault三個地方了。所以這一篇干脆多帶帶寫成一篇文章。
其實這篇文章的動機也很簡單,每個初學Java的人,都會被配置環境變量所難倒。尤其是對于那些不太懂電腦的人來說,配置環境變量簡直要命了。就算我這種配置了幾十次環境變量的人,也經常忘了怎么配置,每次配置也得現查。最蛋疼的是,JDK的Windows平臺安裝包居然沒有配置環境變量的功能,那么這個安裝包到底有何用處?
好了,廢話不多說了。由于這里只打算編寫一個簡單的腳本,所以首先讓我們規定一下這個腳本的用途。我的想法很簡單,這個腳本應該在JDK安裝程序執行完畢調用,從注冊表獲取JDK的安裝位置,然后自動完成環境變量的配置。至于安裝位置是否存在,安裝文件是否缺失,這都屬于用戶的問題,不是我這個腳本的解決范圍。
獲取JDK位置在Windows注冊表中保存著所有安裝程序的信息,它們都在HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstall鍵下。
然后我們尋找JDK的信息。這里我從我電腦的安裝的JDK 8中截取了前一部分SE Development Kit作為查詢字符串,不保證JDK 6和JDK 7的前一部分也和這一樣。
$softwares = Get-ItemProperty HKLM:SoftwareMicrosoftWindowsCurrentVersionUninstall* $jdk = $softwares | Where-Object DisplayName -Match "Java SE Development Kit"
考慮到有的人電腦上安裝了不止一個JDK,我這里還做了多個JDK的處理工作。不過由于我電腦上只有一個JDK,所以這一部分我沒有測試,不保證一定可以工作。
if ($jdk.Count -gt 1) { Write-Host "Found more than one jdks :" $id = 1 foreach ($e in $jdk) { Write-Host "${id}." $e.DisplayName $id++ } $choice = [int](Read-Host -Prompt "which to use ?") $jdk = $jdk[$choice] }
獲取到JDK信息之后,讀取它的安裝位置屬性,即可獲取到JDK的安裝位置。
$install_location = $jdk.InstallLocation # 去掉路徑最后的斜杠 Write-Host "Found installation Location : ${install_location}".trim("")添加環境變量
下面參考鏈接中介紹了新建環境變量的方法。如果需要創建一個臨時環境變量,也就是只在當前Powershell窗口中有效的,只需要一句話就可以搞定。
$env:TestVariable = "This is a test environment variable."
如果需要創建用戶或者系統級別的環境變量,需要調用.NET框架的方法。這個方法有三個參數,第一個指定環境變量名稱,第二個指定環境變量的值,第三個指定環境變量類型(Process是僅當前進程有效,User是用戶級別,Machine是系統環境變量且需要管理員權限)。
[Environment]::SetEnvironmentVariable("TestVariable", "Test value.", "Machine")
然后我們根據JDK安裝位置設置環境變量。
$java_home = $install_location $classpath = "%JAVA_HOME%lib;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib ools.jar" $path = "%JAVA_HOME%in;" + $env:Path [Environment]::SetEnvironmentVariable("JAVA_HOME", $java_home, "Machine") [Environment]::SetEnvironmentVariable("CLASSPATH", $classpath, "Machine") [Environment]::SetEnvironmentVariable("PATH", $path , "Machine")
最后,打開一個新的CMD或者是Powershell窗口,輸入一下兩條命令測試環境變量是否配置正確。需要注意JDK安裝包好像會寫一個java.exe鏈接到可執行路徑下,所以java和javac兩條命令都需要測試才能確保環境變量配置成功。
java -version javac -version完整腳本
下面是完整的腳本,它也放到了我的Github上面了,有興趣的同學可以看看。
# 設置Java SDK 環境變量 $softwares = Get-ItemProperty HKLM:SoftwareMicrosoftWindowsCurrentVersionUninstall* $jdk = $softwares | Where-Object DisplayName -Match "Java SE Development Kit" if ($jdk.Count -gt 1) { Write-Host "找到多個JDK安裝程序:" $id = 1 foreach ($e in $jdk) { Write-Host "${id}." $e.DisplayName $id++ } $choice = [int](Read-Host -Prompt "應該使用哪個?") $jdk = $jdk[$choice] } $install_location = $jdk.InstallLocation.trim("") # 去掉路徑最后的斜杠 Write-Host "發現安裝位置: ${install_location}" # 配置環境變量 $java_home = $install_location $classpath = "%JAVA_HOME%lib;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib ools.jar" $path = "%JAVA_HOME%in;" + $env:Path [Environment]::SetEnvironmentVariable("JAVA_HOME", $java_home, "Machine") [Environment]::SetEnvironmentVariable("CLASSPATH", $classpath, "Machine") [Environment]::SetEnvironmentVariable("PATH", $path , "Machine") Write-Host "配置JDK環境變量成功"
因為這篇文章寫出了可能就不會再更新了,而Github上腳本還可能會繼續更新,所以我又寫了個下載執行Github上腳本的命令。
invoke-WebRequest https://raw.githubusercontent.com/techstay/powershell-study/master/scripts/set-jdk-env-variables.ps1|Select-Object -ExpandProperty content|Invoke-Expression
如果出現什么策略錯誤,可能是默認情況Powershell禁止運行遠程腳本,允許就可以了。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
這個腳本在我電腦上測試沒問題,不過不一定能夠在所有系統上運行。所以使用的時候請注意,同時歡迎反饋信息。
參考資料http://jingyan.baidu.com/arti...
https://technet.microsoft.com...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/67134.html
摘要:環境變量配置環境變量配置在系統變量中新建變量,變量值為安裝路徑,例如默認安裝路徑如下在系統變量中編輯變量,變量值為在系統變量中新建變量,變量值為環境變量配置在系統變量中新建變量,變量值為安裝路徑,例如默認安裝路徑如下在系統變量中新建變量, JDK 環境變量配置 JDK 8 環境變量配置 在系統變量中新建 JAVA_HOME 變量,變量值為 JDK 安裝路徑,例如 JDK 8 默認安...
閱讀 2115·2021-11-24 09:39
閱讀 1501·2019-08-30 15:44
閱讀 1951·2019-08-29 17:06
閱讀 3402·2019-08-29 16:32
閱讀 3548·2019-08-29 16:26
閱讀 2660·2019-08-29 15:35
閱讀 3032·2019-08-29 12:50
閱讀 1643·2019-08-29 11:15