1

我创建了这个函数:

function setUserEnvVar ([string]$varName, [string]$varValue)
{
  [Environment]::SetEnvironmentVariable($varName, $varValue, "User")
}

我使用 varName 和 varValue 来确保不会与我现在可能不知道的任何 PowerShell 内置变量发生冲突。当我使用它调用它时

setUserEnvVar("hi", "lo")

什么都没发生。

我检查了通过 Windows GUI 的用户环境变量。我知道你必须重新加载 PowerShell 才能看到环境变量的变化。

但是当我直接使用

[Environment]::SetEnvironmentVariable("hi", "lo", "User")

一切都按预期工作。

相比之下,这个函数工作得很好:

function getUserEnvVar ([string]$Name)
{
  [Environment]::GetEnvironmentVariable($Name, "User")
}
4

1 回答 1

4

Powershell 在参数列表中不使用逗号或括号。像这样调用函数:

setUserEnvVar "hi" "lo"

发生的事情是您将字符串数组作为第一个参数传递,而没有作为第二个参数传递。Powershell 将字符串数组强制转换为字符串(在您的示例中为“hi lo”)。然后,由于变量值为空,Environment.SetEnvironmentVariable实际上是删除具有该名称的任何现有变量。

于 2013-11-06T16:58:29.960 回答