无法删除 PowerShell 环境变量

Azu*_*ang 12 powershell

我之前在 Windows PowerShell 中设置了两个环境变量HTTP_PROXY和。HTTPS_PROXY现在我想删除它们,但我发现无论我如何输入命令,下次打开PowerShell时,这两个变量都会再次出现。

以下是我尝试过的命令:

$env:HTTP_PROXY=''
$env:HTTPS_PROXY=''

[Environment]::SetEnvironmentVariable('HTTP_PROXY', '', 'User')
[Environment]::SetEnvironmentVariable('HTTPS_PROXY', '', 'User')
[Environment]::SetEnvironmentVariable('HTTP_PROXY', '', 'Machine')
[Environment]::SetEnvironmentVariable('HTTPS_PROXY', '', 'Machine')

Set-Location Env:
rm HTTP_PROXY
rm HTTPS_PROXY
Run Code Online (Sandbox Code Playgroud)

但它们都不起作用。

mkl*_*nt0 13

$env:HTTP_PROXY=''
$env:HTTPS_PROXY=''
或者:
Set-Location Env:
rm HTTP_PROXY
rm HTTPS_PROXY

上面的语句仅从当前会话(进程)中删除指定的环境变量(请注意,在类Unix平台上,您必须使用 aliasri而不是rm,或者使用 cmdlet 的全名 , Remove-Item;例如,不Set-Location首先使用,ri Env:HTTP_PROXY)。

另请参阅:about_Environment_Variables

但是,如果通过注册表(在 Windows 上)持久定义这些环境变量,它们在未来的会话中重新出现。


[Environment]::SetEnvironmentVariable('HTTP_PROXY', '', 'User')
[Environment]::SetEnvironmentVariable('HTTPS_PROXY', '', 'User')
[Environment]::SetEnvironmentVariable('HTTP_PROXY', '', 'Machine')
[Environment]::SetEnvironmentVariable('HTTPS_PROXY', '', 'Machine')

上面的语句-假设它们执行时不会触发异常-确实删除了持久定义(仅在 Windows 上)

  • 请注意,设置/删除计算机级变量 ( 'Machine') 需要提升(以管理员身份运行)。

  • 根据设计,以下任何值都会导致指定的环境变量被删除''[NullString]::Value(相当于nullC# [1]中的),"`0"(单个NUL( 0x0) 字符。)

    • 顺便说一句:这种宽容是有问题的,因为它阻止创建值为空字符串的环境变量,这在类 Unix 平台上并不罕见 - 请参阅GitHub 问题 #50554
  • 请注意,这些方法仅删除 这些变量的持久定义-当前会话(进程)中的任何定义保持不变;要删除它们,请使用顶部的方法。

如果环境变量在以后的会话中仍然意外地重新出现,则有两个潜在原因

  • 也许您直接从旧会话启动了一个新会话,例如Start-Process powershell.exe- 在这种情况下,当前会话的环境变量将由新会话继承,因此除非您也从当前会话中删除了环境变量,否则新会话将看他们。

  • 特别是,您的配置文件中可能有代码$PROFILE,每当新会话启动时(重新)定义这些环境变量。

    • 要排除这种可能性,请使用 WindowsRun对话框 ( WinKey-R) 并提交powershell -noprofile,然后检查这些变量是否仍然存在。

[1] PowerShell 确实有一个$null常量,通常与 C# 的 等效null,但在字符串上下文中,PowerShell 强制将$null值设置为''(空字符串)。因此,[NullString]::Value需要单例才能将真实null值传递给string类型化的 .NET 方法。