为什么PowerShell SetEnvironmentVariable命令删除现有变量?

时间:2019-05-15 14:42:34

标签: windows powershell

早安,

我已经编写了PowerShell函数,以帮助我更新一堆Windows 7和10 Enterprise计算机上的系统环境变量。但是,我注意到,我的“ [System.Environment] :: SetEnvironmentVariable()” 命令正在删除现有变量,并且未更改其值-就像我期望的那样。

我在做什么错了?

以下是相关代码的片段:

$ComputerName = "SERVER1"
$MyEnvVar = "C:\Some_Path\"

ForEach ($Computer in $ComputerName){

    $Online = Test-Connection -ComputerName $Computer -Count 2 -Quiet

    If ($Online -eq $True){
        $OldValue = Invoke-Command $Computer -ScriptBlock {[System.Environment]::GetEnvironmentVariable("MyVariableName","Machine")}
        Write-Host "Old Value is: $OldValue"
        Invoke-Command $Computer -ScriptBlock {[System.Environment]::SetEnvironmentVariable("MyVariable","$MyEnvVar","Machine")}
        $NewValue = Invoke-Command $Computer -ScriptBlock {[System.Environment]::GetEnvironmentVariable("MyVariableName","Machine")}
        Write-Host "New Value is: $NewValue"

    }
}

1 个答案:

答案 0 :(得分:2)

更改此行:

  Invoke-Command $Computer -ScriptBlock {[System.Environment]::SetEnvironmentVariable("MyVariable","$MyEnvVar","Machine")}

收件人:

 Invoke-Command $Computer -ScriptBlock {[System.Environment]::SetEnvironmentVariable("MyVariable",$Using:MyEnvVar,"Machine")}

来自about_scopes

  

示例5:在远程命令中使用局部变量

     

对于在本地会话中创建的远程命令中的变量,请使用“使用范围”修饰符。 PowerShell假定远程命令中的变量是在远程会话中创建的。

也结帐about_remote_variable