【问题标题】:Setting environment variables to an empty string in PowerShell在 PowerShell 中将环境变量设置为空字符串
【发布时间】:2018-04-27 14:16:53
【问题描述】:

我正在尝试在 PowerShell 中将环境变量设置为空字符串。请注意,我不想 unset 环境变量;我想要它设置但为空。但是,如果您只是将环境变量设置为空字符串,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。我暂时放弃换壳了。

【问题讨论】:

  • 这解决了什么问题(为什么需要它)?
  • 不确定 Docker 会怎么做,但您可以通过将其设置为非打印字符来将其设置为“空”字符串。例如,一个“标签”:Set-Item -Path ENV:VAR -Value "`t"
  • @boxdog 只是让 Docker 感到困惑,不幸的是: Traceback(最近一次调用最后一次): docker.errors.TLSParameterError: 证书和密钥文件的路径必须通过 client_config 参数提供。 TLS 配置应该映射 Docker CLI 客户端配置。有关 API 详细信息,请参阅docs.docker.com/engine/articles/https。不过还是谢谢你的建议
  • 试试这个:[String[]]$ENV:VAR = $Null 或 [String[]]$ENV:VAR = ""
  • 另外,您是否尝试过设置 DOCKER_TLS_VERIFY = $False

标签: powershell environment-variables


【解决方案1】:

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

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

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

但是,如果您使用环境变量尝试相同的操作,它将不起作用:

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

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

我认为这可能是从旧的 DOS 环境变量方式继承而来的行为。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-09-29
      • 1970-01-01
      • 1970-01-01
      • 2016-01-11
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      • 2019-07-28
      相关资源
      最近更新 更多