Powershell 重新排列去重 Windows環境變數

全面回憶發表於2024-09-14
最近亂搞環境變數,然後有些重複了,遂寫個指令碼去重下排序下。

環境變數有長度限制,如果超出了,比如SqlServer相關的,將共同路徑單獨搞個變數宣告下,比如

將其路徑手動替換成如下,可大幅壓縮變數長度

但是,Powershell指令碼在獲取環境變數時又會將這些恢復成原路徑,建議點選編輯文字,將其複製下來,替換指令碼中的$list變數值。

好了,注意事項說完了,貼下指令碼,建議操作前備份下檢查下

# 直接獲取變數,如%JAVA_HOME%會顯示原文,可能導致長度超過2047導致部分失效
$list = $env:Path -split [System.Environment]::NewLine

# 從系統介面複製獲取示例
# $list="%JAVA_HOME%\bin
# C:\app\YiXinDa\product\21c\dbhomeXE\bin
# %ProgramFiles86%\Common Files\Oracle\Java\javapath
# %windir%\system32
# %windir%
# %windir%\System32\Wbem
# %windir%\System32\WindowsPowerShell\v1.0\
# %windir%\System32\OpenSSH\
# %ProgramFiles86%\Intel\Intel(R) Management Engine Components\DAL
# %ProgramFiles%\Intel\Intel(R) Management Engine Components\DAL
# %MSSQL86%\100\Tools\Binn\"  -split [System.Environment]::NewLine

$uniqueArray = $list | Select-Object -Unique
$uniqueArray = $uniqueArray | Sort-Object
$final = New-Object System.Text.StringBuilder("")
foreach ($item in $uniqueArray) {
    $final.Append($item + ";")
    # Write-Host $item
}
Write-Host $final
[Environment]::SetEnvironmentVariable("PATH", $final , "Machine")

相關文章