如何在PowerShell中将字符串替换为另一个变量的值

时间:2019-04-11 16:25:41

标签: windows powershell

我正在尝试通过执行以下操作来修改系统路径环境变量。不幸的是,我观察到的是,如果我对字符串进行硬编码,但是我使用了变量(这是我希望做的事情),则它不起作用。

我没有错误;只是不起作用。这是我的代码:

$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 个答案:

答案 0 :(得分:1)

这是我建议的解决方案:

$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区分大小写。对于这种可能的边缘情况,我也没有使用斜杠。

答案 1 :(得分:0)

结果是我需要将变量包装在$()中,如下所示:

collectionOperations

我不确定为什么会这样,但是我的另一个同事引起了我的注意,我想我会分享的,以防其他人遇到这个问题。如果外面有人可以阐明为什么会出现这种情况,请随时为我们的共同教育而这么做。

如果我还找到其他信息,我将回发此答案。