Когда вы используете одинарные кавычки, это называется строкой литерал и не поддерживает расширение переменной .Чтобы исправить это, вам нужно использовать двойные кавычки (или вообще не использовать кавычки, если ваша переменная является строкой и вы добавляете +
):
(Get-Content -Path "$TargetLocation\Data\config.txt") |
ForEach-Object {
$_ -replace "^dbconnecthost=$SourceDBConnectHost", "dbconnecthost=$TargetDBConnectHost"
} |
Set-Content -Path "$TargetLocation\Data\config.txt"
Хотя ваше регулярное выражение можно улучшить с помощьювзгляд:
"(?<=^dbconnecthost=)$SourceDBConnectHost", $TargetDBConnectHost
Сокращенный:
$path = @{Path = "$TargetLocation\Data\config.txt"}
$pattern = "(?<=^dbconnecthost=)$SourceDBConnectHost"
(Get-Content @path) -replace $pattern, $TargetDBConnectHost | Set-Content @path