我发现设置PATH环境变量只影响旧的命令提示符。PowerShell似乎有不同的环境设置。如何更改PowerShell (v1)的环境变量?

注意:

我希望我的更改是永久性的,这样我就不必每次运行PowerShell时都设置它。PowerShell有配置文件吗?比如Unix上的Bash配置文件?


当前回答

我发现将C:\vcpkg永久添加到我的PATH env变量中而没有缺点的最简单的解决方案是:

$current_PATH = [Environment]::GetEnvironmentVariable("PATH", "USER");[Environment]::SetEnvironmentVariable("PATH", "$current_PATH;C:\vcpkg;", "USER")

您可以将“USER”更改为“MACHINE”以更改系统环境变量(需要一个管理终端,您可能需要将“Environment”更改为“system .Environment”),甚至可以将“PROCESS”更改为仅更改本地PATH环境变量(不会永久更改)。分别是"USER"=1 "MACHINE"=2和"PROCESS"=0以下是关于这些命令的文档

我发现了另外两个答案,但有很大的缺点,我不建议使用它们。两者都使用SETX,因为它是由PowerShell实现的,以永久地改变env变量。这些命令的缺点是,你将复制你的系统路径到你的区域路径,你需要PowerShell来使用它们:

setx PATH "$($Env:PATH);C:\vcpkg;"

更长,但允许使用其他env变量:

$($Env:PATH).Split(';') | %{ $str += "$($_.Trim('"'));" }; %{ $str += "C:\vcpkg;" } ; setx PATH $str; %{ $str = "" }

其他回答

在PowerShell中,可以通过输入以下命令导航到环境变量目录:

Set-Location Env:

这将把您带到Env:>目录。在这个目录中:

要查看所有环境变量,输入:

Env:\> Get-ChildItem

要查看特定的环境变量,输入:

Env:\> $Env:<variable name>, e.g. $Env:Path

要设置一个环境变量,输入:

Env:\> $Env:<variable name> = "<new-value>", e.g. $Env:Path="C:\Users\"

要删除一个环境变量,输入:

Env:\> remove-item Env:<variable name>, e.g. remove-item Env:SECRET_KEY

更多信息请参见关于环境变量。

你也可以用以下方法永久地修改用户/系统环境变量(即在shell重新启动时保持不变):

修改系统环境变量

[Environment]::SetEnvironmentVariable
     ("Path", $env:Path, [System.EnvironmentVariableTarget]::Machine)

修改用户环境变量

[Environment]::SetEnvironmentVariable
     ("INCLUDE", $env:INCLUDE, [System.EnvironmentVariableTarget]::User)

使用注释-添加到系统环境变量

[Environment]::SetEnvironmentVariable(
    "Path",
    [Environment]::GetEnvironmentVariable("Path", [EnvironmentVariableTarget]::Machine) + ";C:\bin",
    [EnvironmentVariableTarget]::Machine)

如果你不想写类型,基于字符串的解决方案也是可能的

[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\bin", "Machine")

更改实际的环境变量可以通过 使用env:命名空间/驱动器信息。例如,这个 代码将更新path环境变量:

$env:Path = "SomeRandomPath";             (replaces existing path) 
$env:Path += ";SomeRandomPath"            (appends to existing path)

让改变永久化

有办法让环境设置永久存在,但是 如果你只从PowerShell中使用它们,它可能 使用Powershell配置文件脚本更好。

每次Powershell的一个新实例启动时,它都会查找特定的脚本文件(称为配置文件),如果它们存在,就执行它们。您可以编辑这些概要文件中的一个来定制您的环境。

要了解这些配置文件脚本在您的计算机中的位置,请键入:

$profile                                     
$profile.AllUsersAllHosts           
$profile.AllUsersCurrentHost        
$profile.CurrentUserAllHosts    
$profile.CurrentUserCurrentHost     

你可以编辑其中一个,例如,输入:

notepad $profile

虽然目前接受的答案在某种意义上是路径变量从PowerShell的上下文中被永久更新,但它实际上并不更新存储在Windows注册表中的环境变量。

要实现这一点,你显然也可以使用PowerShell:

$oldPath=(Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH).Path

$newPath=$oldPath+’;C:\NewFolderToAddToTheList\’

Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH –Value $newPath

更多信息请参见博文《使用PowerShell修改环境路径》

如果您使用PowerShell社区扩展,为环境变量path添加路径的正确命令是:

Add-PathVariable "C:\NewFolderToAddToTheList" -Target Machine

无痛苦的、一行的示例解决方案

尝试这三个命令来练习在PowerShell中设置和删除环境变量。

使用注意事项:

在提升的PowerShell上运行这些命令(例如,具有管理员权限)。 在每一步之后,为了使您的命令工作,关闭会话并再次打开它。

添加/创建永久环境变量:

[Environment]::SetEnvironmentVariable("MyEnvVar", "NewEnvValue", "Machine")

Machine是一个环境变量目标,将应用于当前和未来的用户,而不是User目标。


修改/改变环境变量:

[Environment]::SetEnvironmentVariable("MyEnvVar", "NewerEnvValue", "Machine")

删除/删除变量:

[Environment]::SetEnvironmentVariable("MyEnvVar", "", "Machine")