Как правильно заменить несколько строк в данном файле с помощью PowerShell Replace - PullRequest
0 голосов
/ 15 мая 2019

Я просто пытаюсь нормализовать значения в файле json, которые позже в конвейере будут использоваться в качестве файла параметров для шаблона ARM.

Я попытался использовать параметр "-Replace", иМетод ".Replace" посредством индивидуальных вызовов для каждой замены, а также посредством цепного вызова для всех замен.Результаты всегда одинаковы, и они НЕ соответствуют ожиданиям.

Следующий код ...

$TestFile = Get-Content -Path $ParameterPath -Raw

Write-Host "Replacing $($GeoTag) with $($GeographicTag)"
$TestFile = $TestFile.Replace($GeoTag, $GeographicTag)

Write-Host "Replacing $($RegionName01) with $($PrimaryRegion)"
$TestFile = $TestFile.Replace($RegionName01, $PrimaryRegion)

Write-Host "Replacing $($RegionName02) with $($SecondaryRegion)"
$TestFile = $TestFile.Replace($RegionName02, $SecondaryRegion)

Write-Host "Replacing $($AzLocation01) with $($PrimaryLocation)"
$TestFile = $TestFile.Replace($AzLocation01, $PrimaryLocation)

Write-Host "Replacing $($AzLocation02) with $($SecondaryLocation)"
$TestFile = $TestFile.Replace($AzLocation02, $SecondaryLocation)

Set-Content -Path $ParameterPath -Value $TestFile -NoNewLine

Создает следующий ожидаемый результат в консоли...

Replacing aS with AS
Replacing eaST with East
Replacing SouthEast with Southeast
Replacing EAST AsIa with eastasia
Replacing SoutH EAST AsIa with southeastasia

Но тогда следующее не ожидается приведет к файлу ...

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "geoTag": {
            "value": "AS"
        },
        "regionName01": {
            "value": "eAST"
        },
        "regionName02": {
            "value": "Southeast"
        },
        "azLocation01": {
            "value": "eastasia"
        },
        "azLocation02": {
            "value": "SoutH eastasia"
        }
    }
}

Почему «eaST» заменяется на «eAST»«вместо« Восток »в файле?

Почему вместо« Юго-Восточная Азия »в файле вместо« Юго-Восточная Азия »вместо« Юго-Восточная Азия »?

Мы знаем дляфакт, что переменные PowerShell содержат правильные значения, но по неизвестной мне причине замена происходит странным образом, и мы не получаем ожидаемые значения в файле json.

1 Ответ

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

Неважно, проблема в моей логике. Я понял это сразу после публикации.

1-я замена, помимо превращения «aS» в «AS», также превращает «eaST» в «eAST», что теперь не будет соответствовать 2-й замене, оставаясь таким же, как есть.

4-ая замена, помимо превращения «EAST AsIa» в «eastasia», также превращает «SoutH EAST AsIa» в «SoutH eastasia», которая теперь не будет соответствовать 5-й замене, оставаясь, таким образом, как есть.

Моя логика была ошибочной, но по крайней мере мои данные испытаний указывали на это. Мне удалось заставить его работать как надо, включив двойные кавычки в замену:

$TestFile = $TestFile.Replace("`"$($GeoTag)`"","`"$($GeographicTag)`"")
$TestFile = $TestFile.Replace("`"$($RegionName01)`"","`"$($PrimaryRegion)`"")
$TestFile = $TestFile.Replace("`"$($RegionName02)`"","`"$($SecondaryRegion)`"")
$TestFile = $TestFile.Replace("`"$($AzLocation01)`"","`"$($PrimaryLocation)`"")
$TestFile = $TestFile.Replace("`"$($AzLocation02)`"","`"$($SecondaryLocation)`"")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...