Как заменить строку на значение другой переменной в PowerShell - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь изменить переменную среды System Path, выполнив следующие действия.К сожалению, я наблюдаю, что если я жестко закодирую строку, она работает, но я использую переменную (что я бы предпочел сделать), она не работает.

Я не получаю ошибок;это просто не работает.Вот мой код:

$GlobalEnvPath = "C:\Path\ToApp\"
$CurrentEnvPath = [System.Environment]::GetEnvironmentVariable('PATH','Machine')
If ($CurrentEnvPath –match ".+?\;$") { $CurrentEnvPath = $CurrentEnvPath –replace ".{1}$" } #Sanitize the acquired string to remove any trailing semi-colons
$TempNewEnvPath = $CurrentEnvPath.Replace("$GlobalEnvPath",$null) #Find and replace the installation directory with a null value
$NewEnvPath = $TempNewEnvPath.Replace(";;",$null) #Find and replace any double semi-colons that may be present
[System.Environment]::SetEnvironmentVariable('PATH',$NewEnvPath,'Machine') #Finally, let’s write our changes back to the system registry

Часть, с которой у меня возникают проблемы:

$TempNewEnvPath = $CurrentEnvPath.Replace("$GlobalEnvPath",$null)

Любая помощь будет очень признательна, спасибо.

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

Вот мое предлагаемое решение:

$path = @([Environment]::GetEnvironmentVariable('PATH', 'Machine') -split ';')

$exclude = [regex]::Escape('C:\Path\ToApp\' -replace '\\$')
$newPath = $path -notmatch $exclude -join ';'

[Environment]::SetEnvironmentVariable('PATH', $newPath, 'Machine')

Это освобождает место для ошибки.Например, String#Replace чувствителен к регистру.Я также оставляю завершающий слеш отсутствующим для этого возможного крайнего случая.

0 голосов
/ 11 апреля 2019

Оказывается, мне нужно было обернуть мою переменную в $ () примерно так:

$TempNewEnvPath = $CurrentEnvPath.Replace("$($GlobalEnvPath)",$null)

Я не совсем уверен, почему это так, но другой мой коллега обратил на это мое внимание, и я подумалЯ поделюсь этим на случай, если кто-то еще столкнется с этой проблемой.Если кто-то может пролить свет на то, почему это так, пожалуйста, не стесняйтесь сделать это для нашего общего назидания.

Если я также найду дополнительную информацию, я отправлю ответ на этот ответ.

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