摘要:尤其是對(duì)于那些不太懂電腦的人來說,配置環(huán)境變量簡(jiǎn)直要命了。我的想法很簡(jiǎn)單,這個(gè)腳本應(yīng)該在安裝程序執(zhí)行完畢調(diào)用,從注冊(cè)表獲取的安裝位置,然后自動(dòng)完成環(huán)境變量的配置。
本來想把這篇的內(nèi)容包括在我的Powershell系列文章之內(nèi)的,后來寫完之后才想起來,這時(shí)候我已經(jīng)復(fù)制粘貼到簡(jiǎn)書、CSDN和SegmentFault三個(gè)地方了。所以這一篇干脆多帶帶寫成一篇文章。
其實(shí)這篇文章的動(dòng)機(jī)也很簡(jiǎn)單,每個(gè)初學(xué)Java的人,都會(huì)被配置環(huán)境變量所難倒。尤其是對(duì)于那些不太懂電腦的人來說,配置環(huán)境變量簡(jiǎn)直要命了。就算我這種配置了幾十次環(huán)境變量的人,也經(jīng)常忘了怎么配置,每次配置也得現(xiàn)查。最蛋疼的是,JDK的Windows平臺(tái)安裝包居然沒有配置環(huán)境變量的功能,那么這個(gè)安裝包到底有何用處?
好了,廢話不多說了。由于這里只打算編寫一個(gè)簡(jiǎn)單的腳本,所以首先讓我們規(guī)定一下這個(gè)腳本的用途。我的想法很簡(jiǎn)單,這個(gè)腳本應(yīng)該在JDK安裝程序執(zhí)行完畢調(diào)用,從注冊(cè)表獲取JDK的安裝位置,然后自動(dòng)完成環(huán)境變量的配置。至于安裝位置是否存在,安裝文件是否缺失,這都屬于用戶的問題,不是我這個(gè)腳本的解決范圍。
獲取JDK位置在Windows注冊(cè)表中保存著所有安裝程序的信息,它們都在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"
考慮到有的人電腦上安裝了不止一個(gè)JDK,我這里還做了多個(gè)JDK的處理工作。不過由于我電腦上只有一個(gè)JDK,所以這一部分我沒有測(cè)試,不保證一定可以工作。
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("")添加環(huán)境變量
下面參考鏈接中介紹了新建環(huán)境變量的方法。如果需要?jiǎng)?chuàng)建一個(gè)臨時(shí)環(huán)境變量,也就是只在當(dāng)前Powershell窗口中有效的,只需要一句話就可以搞定。
$env:TestVariable = "This is a test environment variable."
如果需要?jiǎng)?chuàng)建用戶或者系統(tǒng)級(jí)別的環(huán)境變量,需要調(diào)用.NET框架的方法。這個(gè)方法有三個(gè)參數(shù),第一個(gè)指定環(huán)境變量名稱,第二個(gè)指定環(huán)境變量的值,第三個(gè)指定環(huán)境變量類型(Process是僅當(dāng)前進(jìn)程有效,User是用戶級(jí)別,Machine是系統(tǒng)環(huán)境變量且需要管理員權(quán)限)。
[Environment]::SetEnvironmentVariable("TestVariable", "Test value.", "Machine")
然后我們根據(jù)JDK安裝位置設(shè)置環(huán)境變量。
$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")
最后,打開一個(gè)新的CMD或者是Powershell窗口,輸入一下兩條命令測(cè)試環(huán)境變量是否配置正確。需要注意JDK安裝包好像會(huì)寫一個(gè)java.exe鏈接到可執(zhí)行路徑下,所以java和javac兩條命令都需要測(cè)試才能確保環(huán)境變量配置成功。
java -version javac -version完整腳本
下面是完整的腳本,它也放到了我的Github上面了,有興趣的同學(xué)可以看看。
# 設(shè)置Java SDK 環(huán)境變量 $softwares = Get-ItemProperty HKLM:SoftwareMicrosoftWindowsCurrentVersionUninstall* $jdk = $softwares | Where-Object DisplayName -Match "Java SE Development Kit" if ($jdk.Count -gt 1) { Write-Host "找到多個(gè)JDK安裝程序:" $id = 1 foreach ($e in $jdk) { Write-Host "${id}." $e.DisplayName $id++ } $choice = [int](Read-Host -Prompt "應(yīng)該使用哪個(gè)?") $jdk = $jdk[$choice] } $install_location = $jdk.InstallLocation.trim("") # 去掉路徑最后的斜杠 Write-Host "發(fā)現(xiàn)安裝位置: ${install_location}" # 配置環(huán)境變量 $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環(huán)境變量成功"
因?yàn)檫@篇文章寫出了可能就不會(huì)再更新了,而Github上腳本還可能會(huì)繼續(xù)更新,所以我又寫了個(gè)下載執(zhí)行Github上腳本的命令。
invoke-WebRequest https://raw.githubusercontent.com/techstay/powershell-study/master/scripts/set-jdk-env-variables.ps1|Select-Object -ExpandProperty content|Invoke-Expression
如果出現(xiàn)什么策略錯(cuò)誤,可能是默認(rèn)情況Powershell禁止運(yùn)行遠(yuǎn)程腳本,允許就可以了。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
這個(gè)腳本在我電腦上測(cè)試沒問題,不過不一定能夠在所有系統(tǒng)上運(yùn)行。所以使用的時(shí)候請(qǐng)注意,同時(shí)歡迎反饋信息。
參考資料http://jingyan.baidu.com/arti...
https://technet.microsoft.com...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/67134.html
摘要:入坑指南是滴,下面是一個(gè)最低的入坑還應(yīng)該有種設(shè)計(jì)模式應(yīng)該掌握的。堆棧以幀為單位保存線程的狀態(tài),對(duì)堆棧的操作為壓棧和出棧執(zhí)行字節(jié)碼以后,將會(huì)產(chǎn)生程序計(jì)數(shù)器和棧,程序計(jì)數(shù)器存放將要執(zhí)行下一條指令的偏移量。 Java入坑指南是滴,下面是一個(gè)最低的入坑 還應(yīng)該有23種設(shè)計(jì)模式應(yīng)該掌握的。╮(╯▽╰)╭注意,第一個(gè)j是大寫。 Java的特點(diǎn)跨平臺(tái),風(fēng)格接近C++最重要的api文檔 https:/...
摘要:環(huán)境變量配置環(huán)境變量配置在系統(tǒng)變量中新建變量,變量值為安裝路徑,例如默認(rèn)安裝路徑如下在系統(tǒng)變量中編輯變量,變量值為在系統(tǒng)變量中新建變量,變量值為環(huán)境變量配置在系統(tǒng)變量中新建變量,變量值為安裝路徑,例如默認(rèn)安裝路徑如下在系統(tǒng)變量中新建變量, JDK 環(huán)境變量配置 JDK 8 環(huán)境變量配置 在系統(tǒng)變量中新建 JAVA_HOME 變量,變量值為 JDK 安裝路徑,例如 JDK 8 默認(rèn)安...
閱讀 2106·2021-11-24 09:39
閱讀 1494·2019-08-30 15:44
閱讀 1946·2019-08-29 17:06
閱讀 3393·2019-08-29 16:32
閱讀 3543·2019-08-29 16:26
閱讀 2654·2019-08-29 15:35
閱讀 3026·2019-08-29 12:50
閱讀 1636·2019-08-29 11:15