我之前在 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) 字符。)
请注意,这些方法仅删除 这些变量的持久定义-当前会话(进程)中的任何定义都保持不变;要删除它们,请使用顶部的方法。
如果环境变量在以后的会话中仍然意外地重新出现,则有两个潜在原因:
也许您直接从旧会话启动了一个新会话,例如Start-Process powershell.exe- 在这种情况下,当前会话的环境变量将由新会话继承,因此除非您也从当前会话中删除了环境变量,否则新会话将看他们。
特别是,您的配置文件中可能有代码$PROFILE,每当新会话启动时(重新)定义这些环境变量。
Run对话框 ( WinKey-R) 并提交powershell -noprofile,然后检查这些变量是否仍然存在。[1] PowerShell 确实有一个$null常量,通常与 C# 的 等效null,但在字符串上下文中,PowerShell 强制将$null值设置为''(空字符串)。因此,[NullString]::Value需要单例才能将真实null值传递给string类型化的 .NET 方法。