使非管理员能够使用更改的 PATH



下面的 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'

后一种技术有两个含义:

  1. 您仍然需要有权修改$PSHOME下的配置文件。
  2. 进程级别变量仅在 PowerShell 会话中可用,并且仅当未使用-NoProfile参数调用powershell.exe时才可用。

相关内容

  • 没有找到相关文章

最新更新