Windows通过powershell永久添加、删除环境变量
PowerShell
PowerShell/PowerShell: PowerShell 是由微软开发的命令行外壳程序和脚本环境,支持任务自动化和配置管理。它包含了丰富的.NET框架功能,适用于Windows和多个非Windows平台,提供了一种强大而灵活的方式来控制和自动执行系统管理任务。
项目地址:https://gitcode.com/gh_mirrors/po/PowerShell
免费下载资源
·
使用windows系统时,当安装或解压一个可执行程序后,为了更方便的调用程序,往往会向环境变量
path
中添加该程序的路径,一般都是通过图形界面来添加,这样比较麻烦,下面通过powershell命令行来实现同等效果。
注册表中存储环境变量的位置有两个:
# 存储用户环境变量
HKCU:\Environment\
# 存储系统环境变量
HKLM:\SYSTEM\ControlSet001\Control\Session Manager\Environment\
其分别对应下图的两个位置:
注意:
- 若想操作当前登录用户的环境变量path,则修改注册表
HKCU:\Environment\
- 若想操作系统变量path,则可对注册表
HKLM:\SYSTEM\ControlSet001\Control\Session Manager\Environment\
进行修改
1、系统环境变量path
PWD C:\Users\fy\Desktop 🕐 2022-07-25 05:35:56
PS > $sysEnv = Get-Item 'HKLM:\SYSTEM\ControlSet001\Control\Session Manager\Environment\'
PWD C:\Users\fy\Desktop 🕐 2022-07-25 05:36:21
PS > $sysEnv.GetValue('path', '', [Microsoft.Win32.RegistryValueOptions]::DoNotExpandEnvironmentNames) -split ';'
%SystemRoot%\system32
%SystemRoot%
%SystemRoot%\System32\Wbem
%SystemRoot%\System32\OpenSSH\
%SystemRoot%\System32\WindowsPowerShell\v1.0\
C:\Program Files\dotnet\
C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR
C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common
C:\Program Files (x86)\VMware\VMware Workstation\bin\
C:\ProgramData\chocolatey\bin
C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\
C:\Program Files (x86)\dotnet\
2、用户环境变量path
PWD C:\Users\fy\Desktop 🕐 2022-07-25 05:34:42
PS > $userEnv = Get-Item HKCU:\Environment\
PWD C:\Users\fy\Desktop 🕐 2022-07-25 05:34:55
PS > $userEnv.GetValue('path', '', [Microsoft.Win32.RegistryValueOptions]::DoNotExpandEnvironmentNames) -split ';'
C:\Program Files\Microsoft SQL Server\130\Tools\Binn\
C:\Program Files\MySQL\MySQL Server 8.0\bin\
C:\Program Files\WindowsApps\Microsoft.PowerShell_7.2.5.0_x64__8wekyb3d8bbwe
C:\soft_bin\
C:\Users\fy\.dotnet\tools
C:\Users\fy\AppData\Local\Microsoft\WindowsApps
C:\Users\fy\scoop\shims
C:\Users\fy\scoop\apps\graphviz\current\bin\
C:\Users\fy\scoop\apps\gsudo\current
C:\Users\fy\scoop\apps\llvm\current\bin
C:\Users\fy\scoop\apps\mingw\current\bin
C:\Users\fy\scoop\apps\mongodb-database-tools\current\bin
C:\Users\fy\scoop\apps\nodejs-lts\current
C:\Users\fy\scoop\apps\nodejs-lts\current\bin
C:\Users\fy\scoop\apps\python39\current
C:\Users\fy\scoop\apps\python39\current\Scripts
C:\Users\fy\scoop\apps\vscode\current\bin
C:\wsr\jdk-11.0.15.1\bin
C:\wsr\Neovim\bin
C:\wsr\Vim\vim90\
C:\wsr\WinRAR\
1 管理环境变量 PATH
1.1 添加powershell函数
function kmanage-env-path {
<#
.DESCRIPTION
管理用户或系统环境变量 PATH ,支持该变量值的添加、删除、查看
.PARAMETER add
向 PATH 中添加值时必须添加的参数
.PARAMETER delete
从 PATH 中删除值时必须添加的参数
.PARAMETER view
查看 PATH 中的值时必须添加的参数
.PARAMETER paths
向 PTATH 中添加或删除值时必须传递的参数,参数值为待添加或删除的路径,支持同
时添加或删除多个路径,传递多个路径值时,每个路径用英文逗号分隔,若路径值中有
空格,则要用引号将路径括住
.PARAMETER machine
要操作的 PATH 的类型,默认对用户环境变量 PATH 进行操作,若要操作系统环境变量
PATH,则开启此开关
.PARAMETER y
若开启此开关则不确认直接删除,否则删除前向用户确认
.EXAMPLE
kmanage-env-path -add c:\users\fy\desktop
向用户环境变量 PATH 中添加值
.EXAMPLE
kmanage-env-path -add c:\users\fy\desktop, "c:\Program Files\path\to\bin" -machine
向系统环境变量 PATH 中添加值。
.EXAMPLE
kmanage-env-path -delete c:\users\fy\desktop -y
从用户环境变量 PATH 中删除值,删除时不确认
.EXAMPLE
kmanage-env-path -delete c:\users\fy\desktop, "c:\Program Files\path\to\bin"
从用户环境变量 PATH 中删除值
.EXAMPLE
kmanage-env-path -delete $(kmanage-env-path -view | grep -i python)
从用户环境变量 PATH 中删除所有带 python 的路径
.EXAMPLE
kmanage-env-path -delete "c:\Program Files\path\to\bin" -machine
从系统环境变量 PATH 中删除值
注意:修改系统环境变量 PATH 时需要以管理员权限打开 powershell 运行函数,查看
则不需要管理员权限
.EXAMPLE
kmanage-env-path -view
查看用户环境变量 PATH 中的值
.EXAMPLE
kmanage-env-path -view -machine
查看系统环境变量 PATH 中的值
#>
Param(
[Parameter(ParameterSetName = 'AddPath', Mandatory)]
[Switch]$add,
[Parameter(ParameterSetName = 'DelPath', Mandatory)]
[Switch]$delete,
[Parameter(ParameterSetName = 'ViewPath', Mandatory)]
[Switch]$view,
[Parameter(ParameterSetName = 'AddPath', Mandatory, Position = 1)]
[Parameter(ParameterSetName = 'DelPath', Mandatory, Position = 1)]
$paths,
[Parameter(ParameterSetName = 'AddPath')]
[Parameter(ParameterSetName = 'DelPath')]
[Parameter(ParameterSetName = 'ViewPath')]
[switch]$machine,
[Parameter(ParameterSetName = 'DelPath')]
[Switch]$y
)
begin {
$regKey = if ($machine) {
'HKLM:\SYSTEM\ControlSet001\Control\Session Manager\Environment\'
} else {
'HKCU:\Environment'
}
$regVal = (Get-Item -Path $regKey).GetValue("PATH", "",
[Microsoft.Win32.RegistryValueOptions]::DoNotExpandEnvironmentNames)
if (';' -ne $regVal.Chars($regVal.Length - 1)) { $regVal += ';' }
}
process {
switch ($PSCmdlet.ParameterSetName) {
'AddPath' {
foreach ($entry in $paths) {
$entry = $entry.Trim()
if ([string]::IsNullOrEmpty($entry)) { continue }
$regVal += $entry + ';'
}
}
'DelPath' {
foreach ($entry in $paths) {
$entry = $entry.Trim()
if ([string]::IsNullOrEmpty($entry)) { continue }
#在参数末尾添加路径分隔符 \
if ('\' -ne $entry.Chars($entry.Length - 1)) {
$entry += '\'
}
$entry += ';'
# 若注册表中对应的路径末尾没有 \,则删除 \ 重新匹配
if ($regVal.IndexOf($entry) -eq -1) {
$entry = $entry.Remove($entry.Length - 2, 1)
}
#去掉参数末尾 \ 后,再次检测。若存在对应值,则执行删除操作
if ($regVal.IndexOf($entry) -ne -1) {
switch ($y) {
$true { $regVal = $regVal.Replace($entry, '') }
Default {
$choice = Read-Host "确定删除 `'$($entry.Remove($entry.Length - 1))`' (y/n)?"
if ('y' -eq $choice) {
$regVal = $regVal.Replace($entry, '')
}
}
}
}
}
}
'ViewPath' {
$regVal.Split(';')
}
}
}
end {
#将修改后的 PATH 值写回注册表
if ($PSCmdlet.ParameterSetName -ne "ViewPath" -and ($regVal.Length -gt 0)) {
Set-ItemProperty -Path $regKey -Name Path -Value $regVal
}
}
}
打开powershell,将上述函数添加到 powershell 配置文件中,请执行.$profile
命令或重新打开一个powershell实例才能使用函数。如果没有则在目录下新建对应文件即可:
#powershell 5.x 配置文件
C:\Users\username\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
#powershell 7.x 配置文件
C:\Users\username\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
添加之后,使用时只需要调用相应函数并传递参数即可。实现的效果是永久性的,因为是通过直接操作注册表实现的。注意:
- 若操作的是用户环境变量 PATH,需要注销登陆并重新登陆,才能使更改生效
- 若操作的是系统环境变量 PATH,则需要重启电脑使之生效
1.2 函数用法
修改系统环境变量path时,需用管理员权限执行powershell
PS > man kmanage-env-path
NAME
kmanage-env-path
SYNOPSIS
SYNTAX
kmanage-env-path -add [-paths] <Object> [-machine] [<CommonParameters>]
kmanage-env-path -delete [-paths] <Object> [-machine] [-y] [<CommonParameters>]
kmanage-env-path -view [-machine] [<CommonParameters>]
DESCRIPTION
管理用户或系统环境变量 PATH ,支持该变量值的添加、删除、查看
PARAMETERS
-add [<SwitchParameter>]
向 PATH 中添加值时必须添加的参数
Required? true
Position? named
Default value False
Accept pipeline input? false
Accept wildcard characters? false
-delete [<SwitchParameter>]
从 PATH 中删除值时必须添加的参数
Required? true
Position? named
Default value False
Accept pipeline input? false
Accept wildcard characters? false
-view [<SwitchParameter>]
查看 PATH 中的值时必须添加的参数
Required? true
Position? named
Default value False
Accept pipeline input? false
Accept wildcard characters? false
-paths <Object>
向 PTATH 中添加或删除值时必须传递的参数,参数值为待添加或删除的路径,支持同
时添加或删除多个路径,传递多个路径值时,每个路径用英文逗号分隔,若路径值中有
空格,则要用引号将路径括住
Required? true
Position? 2
Default value
Accept pipeline input? false
Accept wildcard characters? false
-machine [<SwitchParameter>]
要操作的 PATH 的类型,默认对用户环境变量 PATH 进行操作,若要操作系统环境变量
PATH,则开启此开关
Required? false
Position? named
Default value False
Accept pipeline input? false
Accept wildcard characters? false
-y [<SwitchParameter>]
若开启此开关则不确认直接删除,否则删除前向用户确认
Required? false
Position? named
Default value False
Accept pipeline input? false
Accept wildcard characters? false
<CommonParameters>
This cmdlet supports the common parameters: Verbose, Debug,
ErrorAction, ErrorVariable, WarningAction, WarningVariable,
OutBuffer, PipelineVariable, and OutVariable. For more information, see
about_CommonParameters (https://go.microsoft.com/fwlink/?LinkID=113216).
INPUTS
OUTPUTS
-------------------------- EXAMPLE 1 --------------------------
PS > kmanage-env-path -add c:\users\fy\desktop
向用户环境变量 PATH 中添加值
-------------------------- EXAMPLE 2 --------------------------
PS > kmanage-env-path -add c:\users\fy\desktop, "c:\Program Files\path\to\bin" -machine
向系统环境变量 PATH 中添加值。
-------------------------- EXAMPLE 3 --------------------------
PS > kmanage-env-path -delete c:\users\fy\desktop -y
从用户环境变量 PATH 中删除值,删除时不确认
-------------------------- EXAMPLE 4 --------------------------
PS > kmanage-env-path -delete c:\users\fy\desktop, "c:\Program Files\path\to\bin"
从用户环境变量 PATH 中删除值
-------------------------- EXAMPLE 5 --------------------------
PS > kmanage-env-path -delete $(kmanage-env-path -view | grep -i python)
从用户环境变量 PATH 中删除所有带 python 的路径
-------------------------- EXAMPLE 6 --------------------------
PS > kmanage-env-path -delete "c:\Program Files\path\to\bin" -machine
从系统环境变量 PATH 中删除值
注意:修改系统环境变量 PATH 时需要以管理员权限打开 powershell 运行函数,查看
则不需要管理员权限
-------------------------- EXAMPLE 7 --------------------------
PS > kmanage-env-path -view
查看用户环境变量 PATH 中的值
-------------------------- EXAMPLE 8 --------------------------
PS > kmanage-env-path -view -machine
查看系统环境变量 PATH 中的值
2 管理非 PATH 环境变量
对于系统中非 PATH 以外的环境变量,可直接利用 .net 静态方法来设置,方法如下。
1、方法概述
SetEnvironmentVariable(String, String, EnvironmentVariableTarget)
创建、修改或删除当前进程中或者为当前用户或本地计算机保留的 Windows 操作系统注册表项中存储的环境变量。
2、使用说明
[System.Environment]::SetEnvironmentVariable(变量名, 变量值, 变量作用范围)
变量值如果为空字符串则删除该变量,不空则创建或修改该变量,作用范围为 “user” 或 “machine”,
分别对应用户环境变量和系统环境变量
# 创建
PS > [Environment]::SetEnvironmentVariable("A_SAMPLE_VAR", "$home\desktop", "user")
# [Environment]::SetEnvironmentVariable("A_SAMPLE_VAR", "$home\desktop", "machine")
# 修改
PS > [Environment]::SetEnvironmentVariable("A_SAMPLE_VAR", "$home\desktop\test", "user")
# 删除
PS > [Environment]::SetEnvironmentVariable("A_SAMPLE_VAR", "", "user")
若设置用户环境变量,则需注销并重新登陆才能生效;系统环境变量则需重启才能生效。
3、示例
GitHub 加速计划 / po / PowerShell
16
2
下载
PowerShell/PowerShell: PowerShell 是由微软开发的命令行外壳程序和脚本环境,支持任务自动化和配置管理。它包含了丰富的.NET框架功能,适用于Windows和多个非Windows平台,提供了一种强大而灵活的方式来控制和自动执行系统管理任务。
最近提交(Master分支:4 个月前 )
a1774fd9
4 个月前
5ad1f1d2
4 个月前
更多推荐
已为社区贡献6条内容
所有评论(0)