Редактировать содержимое текстового файла в цикле ForEach-Object - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь отредактировать текстовый файл из PowerHhell после обновления каталога.

Попытка Get-Content из целевого местоположения, где источник dbconnecthost - это то, что мы ищем,Затем мы хотим заменить целевой информацией и Set-Content.Эти переменные извлекаются из другого .ps1 файла.

Вот то, что я пытаюсь использовать.

function ReplaceDBhost {
    Get-Content ("$TargetLocation\Data\config.txt") | Foreach-Object {
        $_ -replace ('^dbconnecthost=' + '$SourceDBConnectHost'), ('dbconnecthost=' + '$TargetDBConnectHost' )
    } | Set-Content  ("$TargetLocation\Data\config.txt")
} 

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

1 Ответ

0 голосов
/ 18 сентября 2018

Когда вы используете одинарные кавычки, это называется строкой литерал и не поддерживает расширение переменной .Чтобы исправить это, вам нужно использовать двойные кавычки (или вообще не использовать кавычки, если ваша переменная является строкой и вы добавляете +):

(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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...