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

时间:2018-04-27 14:16:54

标签: powershell environment-variables

我试图在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。我暂时放弃并换掉了贝壳。

2 个答案:

答案 0 :(得分:0)

您应该在其他网站上查看以下帖子。根据它的说法,Docker忽略值DOCKER_TLS_VERIFY并将其存在本身用作一种开/关切换。如果您在脚本中已将其打开,则会将其删除,如果您将其删除,则会禁用DLS。

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

答案 1 :(得分:0)

我发现了同样的问题。似乎有一种特殊的环境变量行为,可以通过将它们设置为空白字符串来删除它们。

这可以将局部变量设置为空白字符串:

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

但是,如果您使用环境变量尝试相同的操作,则将无效:

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

根据此网站(https://ss64.com/ps/syntax-env.html),将环境变量设置为空白字符串是删除它的规定方法。

我认为这可能是从旧的DOS环境变量处理方法继承的行为。