Почему команда PowerShell SetEnvironmentVariable удаляет существующую переменную? - PullRequest
0 голосов
/ 15 мая 2019

Добрый день всем,

Я написал функцию 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 Ответ

2 голосов
/ 15 мая 2019

Измените эту строку:

  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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...