PowerShell:如何删除path环境变量中的路径

PowerShell:如何删除path环境变量中的路径,powershell,Powershell,我使用“setx”向path环境变量添加了一个新路径。如何查看是否可以从path环境变量中删除新添加的path?从%path%中删除特定值需要您获取变量,修改它,然后将其放回原处 比如说 # Get it $path = [System.Environment]::GetEnvironmentVariable( 'PATH', 'Machine' ) # Remove unwanted elements $path = ($path.Split(';') | Where-Obje

我使用“setx”向path环境变量添加了一个新路径。如何查看是否可以从path环境变量中删除新添加的path?

从%path%中删除特定值需要您获取变量,修改它,然后将其放回原处

比如说

# Get it
$path = [System.Environment]::GetEnvironmentVariable(
    'PATH',
    'Machine'
)
# Remove unwanted elements
$path = ($path.Split(';') | Where-Object { $_ -ne 'ValueToRemove' }) -join ';'
# Set it
[System.Environment]::SetEnvironmentVariable(
    'PATH',
    $path,
    'Machine'
)

重新启动后,Chris的回答不再有效。要使其在重新启动后工作,您需要修改PATH的注册表位置。以下是从路径中删除项和添加项的函数示例:

# Modify PATH variable
function changePath ($action, $addendum) {
    $regLocation = 
"Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment"
    $path = (Get-ItemProperty -Path $regLocation -Name PATH).path

    # Add an item to PATH
    if ($action -eq "add") {
        $path = "$path;$addendum"
        Set-ItemProperty -Path $regLocation -Name PATH -Value $path
    }

    # Remove an item from PATH
    if ($action -eq "remove") {
        $path = ($path.Split(';') | Where-Object { $_ -ne "$addendum" }) -join ';'
        Set-ItemProperty -Path $regLocation -Name PATH -Value $path
    }
}

# Add an item to your path
changePath "add" "C:\example"

# Remove an item from your path
changePath "remove" "C:\example"

我想提供这篇文章的更新。仅更改
$Env:Path
或使用
[System.Environment]::SetEnvironmentVariable()
不会像Rich之前的文章那样永久更改路径变量(可能是Windows在原始文章之后更改的)。它只会在powershell中为该会话更改它。退出并重新启动powershell后,路径将恢复。要在powershell中永久更改它,必须更改注册表中的值

下面是修改注册表的另一种方法(可以修改以适应新的所需路径)

此信息也可在以下外部网站上找到:

请看这里:@OlcayErtaş只包括删除整个环境变量,而不是从变量值(如PATH)中删除单个项。页面包含仅删除特定项的说明:
remove item Env:\TestVariable
Chris的答案仍然存在,因为他使用
机器
作为
[System.Environment]::SetEnvironmentVariable()
调用,它在后台更新注册表(同样适用于
用户
,它更新当前用户的定义;仅使用
进程
是非持久的)。不仅使用
[System.Environment]::SetEnvironmentVariable()
比直接修改注册表更方便,它还通过
WM\u SETTINGCHANGE
消息通知其他应用程序持久性更改。用户可能还希望将
$\u
替换为
$.TrimEnd('\')
,因为有时路径有尾随斜杠,有时路径没有尾随斜杠
#Path of the directory you want to add
$newPath = 'C:\folder\another folder\etc'

#Gets the original value from the registry
$oldPath = (Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH).path

#Sets the registry to the new value. NOTE: You have to get the old path, otherwise if you just use set-itemproperty with $newPath, it sets it just to that new path, erasing the previous path
Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH -Value "$oldPath$newPath;"
#Semi-colon at the end is to keep the consistency of the path variable
#You can double-check it worked using the Environment Variables GUI