Как редактировать значение INI-файла в Powershell? - PullRequest
0 голосов
/ 22 марта 2019

У меня есть INI-файл:

 [Name]
    Female = 10
    Male = 30

    [Class]
    Kids = 2
    Adult = 10

Я хочу изменить значение каждого раздела. Дайте мне идею, пожалуйста.

Я попробовал этот код:

function Set-OrAddIniValue
{
    Param(
        [string]$FilePath,
        [hashtable]$keyValueList
    )

    $content = Get-Content $FilePath

    $keyValueList.GetEnumerator() | ForEach-Object {
        if ($content -match "^$($_.Key)=")
        {
            $content= $content -replace "^$($_.Key)=(.*)", "$($_.Key)=$($_.Value)"
        }
        else
        {
            $content += "$($_.Key)=$($_.Value)"
        }
    }

    $content | Set-Content $FilePath
}

это код

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Если вы обновили свой код до следующего, он будет более успешным:

function Set-OrAddIniValue
{
    Param(
        [string]$FilePath,
        [hashtable]$keyValueList
    )

    $content = Get-Content $FilePath
    $keyValueList.GetEnumerator() | ForEach-Object {
        if ($content -match "$($_.Key)\s*=")
        {
            $content= $content -replace "$($_.Key)\s*=(.*)", "$($_.Key)=$($_.Value)"
        }
        else
        {
            $content += "$($_.Key)=$($_.Value)"
        }
    }

    $content | Set-Content $FilePath
}

Одна проблема будет, если вы добавите дополнительные пары ключ / значение, все они будут добавлены в последний раздел. Другими словами, код не учитывает разделы.

0 голосов
/ 22 марта 2019

Вы бы сделали так:

$ini = Get-IniContent "<pathToYourIniFile>"
$ini["<yourSection>"]["<yourKey>"] = "<yourValue>"
$ini | out-inifile -FilePath "<pathToYourIniFile>"
...