Сравните конфигурационный файл и обновите существующие значения - PullRequest
0 голосов
/ 05 июля 2018

Мне нужна помощь со скриптом powershell, я просто не могу понять, как это сделать.

Самый простой вопрос: если у меня есть 2 файла конфигурации, 1. по умолчанию и 2. конкретные обновленные значения. Как мне «сравнить» два файла настроек и как создать третий файл конфигурации.

Допустим, один конфиг (default_config.txt):

## general settings ##
user = 1
ringtonetype = 1
ringtonevolume = 10

## user settings
volumespeaker = 10
volumeheadset = 9

## ldap settings
address = 192.168.0.244
subnet = 255.255.255.0
user = admin
password = admin

И конкретные значения для конфигурации два (config_new_site.txt):

## general settings ##
ringtonetype = 5
ringtonevolume = 15

## user settings
volumespeaker = 5
volumeheadset = 5

Как создать файл "config_new_site_updated.txt со значениями по умолчанию и обновленный с" нового сайта "?

Это должно выглядеть так:

## general settings ##
user = 1
ringtonetype = 5
ringtonevolume = 15

## user settings
volumespeaker = 5
volumeheadset = 5

## ldap settings
address = 192.168.0.244
subnet = 255.255.255.0
user = admin
password = admin

Любой совет высоко ценится и заранее спасибо!

1 Ответ

0 голосов
/ 06 июля 2018
$OldConfig = @(Get-Content "C:\test\default_config.txt")
$NewConfig = @(Get-Content "C:\test\config_new_site.txt")


for ($i = 0; $i -lt $OldConfig.Count; $i++)
{ 
    # Skipping NewLines, Comments/Headlines and Invalid Lines
    if($OldConfig[$i] -eq "" -or $OldConfig[$i].Substring(0,1) -eq "#" -or (!$OldConfig[$i] -like "*=*"))
    {
        continue
    }

    #Split at '=' and Remove Spaces to get clean Property & Value
    $OldProperty = $OldConfig[$i].Split('=')[0].TrimEnd().TrimStart()
    $OldValue = $OldConfig[$i].Split('=')[1].TrimEnd().TrimStart()

    $NewValue = $null

    # Loop throuh new Config and Compare Property
    foreach ($NewLine in $NewConfig)
    {
        # Skipping NewLines, Comments/Headlines and Invalid Lines
        if($NewLine -eq "" -or $NewLine.Substring(0,1) -eq "#" -or (!$NewLine -like "*=*"))
        {
            continue
        }

        #Split at '=' and Remove Spaces to get clean Property
        $NewProperty = $NewLine.Split('=')[0].TrimEnd().TrimStart()  

        # Compare Property
        if($OldProperty -eq $NewProperty)
        {
            # Set NewVal if Propertys matched
            $NewValue = $NewLine.Split('=')[1].TrimEnd().TrimStart()
            break
        }     
    }

    # Update Property with new Value if Value has changed
    if($NewValue -ne $null -and $NewValue -ne $OldValue)
    {
        $OldConfig[$i] = "$OldProperty = $NewValue"
        Write-Host "Set `"$OldProperty`" from `"$OldValue`" to `"$NewValue`""          
    }       
}

$OldConfig | Out-File "C:\test\config_new_site_updated.txt" -Force
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...