为什么包装对[Environment] :: SetEnvironmentVariable的调用在PowerShell中不起作用?

时间:2013-11-06 16:52:37

标签: .net powershell

我创建了这个函数:

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")
}

1 个答案:

答案 0 :(得分:4)

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

setUserEnvVar "hi" "lo"

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