在PowerShell中将环境变量设置为空字符串

3

我正在尝试在PowerShell中设置一个环境变量为空字符串。请注意,我不想取消设置环境变量;我希望它被设置为空。然而,如果你将环境变量设置为空字符串,PowerShell会完全删除该环境变量。我尝试了以下方法:

$ENV:VAR=''
$ENV:VAR=[String]::Empty
$ENV:VAR=[NullString]::Value
$ENV:VAR=$null
New-Item -Path ENV:VAR -Value ''
New-Item -Path ENV:VAR -Value [string::Empty]

除了最后一个以外,每个都导致变量不会出现在Get-ChildItem -path ENV:的输出中。最后一个将环境变量设置为字面字符串[string::Empty],这绝对不是我想要的。

为了完整起见:

$PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
5      0      10586  117

我看到空的环境变量是可能存在的,因为我有几个这样的变量:

ConEmuANSI                     ON
ConEmuAnsiLog
ConEmuArgs
ConEmuArgs2
ConEmuBackHWND                 0x00F40BFC

仅供参考,我实际上正在尝试将DOCKER_TLS_VERIFY环境变量设置为空字符串,因为docker-compose将该变量的缺失视为我想要进行TLS验证,并且我使用的Docker主机已禁用TLS。我暂时放弃并切换了shell。


这个解决了什么问题(为什么需要它)? - undefined
@boxdog这会让Docker混淆不清,非常遗憾:Traceback (most recent call last): <snip> docker.errors.TLSParameterError: 必须通过client_config参数提供证书和密钥文件的路径。TLS配置应该映射到Docker CLI客户端配置。有关API详细信息,请参阅https://docs.docker.com/engine/articles/https/。谢谢您的建议。 - undefined
尝试这个:[String[]]$ENV:VAR = $Null 或者 [String[]]$ENV:VAR = "" - undefined
另外,你是否尝试过将 DOCKER_TLS_VERIFY 设置为 $False? - undefined
@NickW。[String[]]$ENV:VAR = $Null和[String[]]$ENV:VAR = ""都不起作用。DOCKER_TLS_VERIFY = $False会让Docker感到困惑(尽管我认为这要归咎于docker-compose)。 - undefined
显示剩余2条评论
2个回答

3
我发现了相同的问题。似乎环境变量有一种特殊的行为,将它们设置为空字符串会删除它们。
这是将本地变量设置为空字符串的方法:
$p = [string]$null
$p.getType()

然而,如果您尝试使用环境变量进行相同的操作,它将无法正常工作:

$Env:p = [string]$null
$Env:p.getType()

根据该网站(https://ss64.com/ps/syntax-env.html)的说法,将环境变量设置为空字符串是删除它的预设方式。
我认为这可能是从旧的DOS环境变量继承而来的行为。

0
你应该看一下另一个网站上的以下帖子。根据它所说,Docker忽略了DOCKER_TLS_VERIFY的值,并使用其存在本身作为一种开关。如果你在脚本中有它,那么它是打开的,如果你删除它,TLS就被禁用了。

https://github.com/moby/moby/issues/22411


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接