下面的 PowerShell 代码在以管理员身份运行的PowerShell 实例中调用PATH
变量时成功更改该变量。 而Windows CMD命令提示符也以管理员身份运行,也可以使用更新的PATH
。 但是新更新的PATH
不适用于PowerShell或Windows CMD命令提示符的普通用户特权实例。
需要对下面的 PowerShell 代码进行哪些特定更改,以便
PATH
变量的更新$newPath
值可用于所有命令提示符和 PowerShell 实例?
$newpath = "$oldpath;$pathItem"
Write-Host "newpath is: $newpath"
#Set the new version as the replacement PATH permanently, but not within this session
Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINESystemCurrentControlSetControlSession ManagerEnvironment' -Name PATH -Value $newPath
#Set the new version as the replacement PATH within this session
$env:path = $newPath
另外,当我尝试在 PowerShell 中以非管理用户身份运行上述代码时,以下代码行会引发权限错误并失败:
Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINESystemCurrentControlSetControlSession ManagerEnvironment' -Name PATH -Value $newPath
除了放宽对该注册表项的权限之外,没有非特权的地方可以设置计算机级环境变量(您真的不应该这样做(。
您需要将变量设置为用户级环境变量:
[Environment]::SetEnvironmentVariable( 'VARIABLE_NAME', 'VALUE', [EnvironmentVariableTarget]::User )
或者,如果只关心 PowerShell 中使用的环境变量,则可以考虑更新其中一个 PowerShell 配置文件以设置进程级环境变量:
$env:VARIABLE_NAME = 'VALUE'
后一种技术有两个含义:
- 您仍然需要有权修改
$PSHOME
下的配置文件。 - 进程级别变量仅在 PowerShell 会话中可用,并且仅当未使用
-NoProfile
参数调用powershell.exe
时才可用。