Назад | Перейти на главную страницу

Создание вывода в PowerShell из ini при сопоставлении, если он существует, пропустить

Я пытаюсь получить данные из .ini файл с помощью PSIni (Get-IniContent). У меня есть формат, который работает, но генерирует слишком много данных. Мой ini файл выглядит так:

[General settings]
gensetting1=random
gensetting2=random
gensetting3=random

[KPROD]
setting1=1
setting2=2
setting3=3
setting4=4

[KTEST]
setting1=1
setting2=2
setting3=3
setting4=4

[KDEV]
setting1=1
setting2=2
setting3=55
setting4=4

Я хотел бы что-нибудь исключить из [General settings] от заполнения в моем выводе. Поскольку они отображаются пустыми, потому что мне не нужно собирать эту информацию, как я указываю в моем коде ниже. Единственные данные, которые мне нужны, это [KPROD] ключи и ценности, но если значения отличаются в [KDEV] и [KTEST] Я хотел бы отобразить значения, которые не совпадают. Вот мой текущий код:

Import-Module psini
$ini = Get-IniContent "D:\PShell\SF\871753.ini"
Foreach ($key in $ini.keys) {
    Write-Host $key ;

    Write-Host "Settings1 and Settings2 are set to:"
    ($ini[$key].GetEnumerator() | 
        Where-Object { $_.key -like "Setting1" -or $_.key -like "Setting2" } | 
            Format-Table -HideTableHeaders | Out-String).trim();

    Write-Host "Setting3 is set to: " ;
    ($ini[$key].GetEnumerator() | 
        Where-Object { $_.key -like "Setting3" } | 
            Format-Table -HideTableHeaders | Out-String).trim();

    Write-Host "Setting4 is set to:" ;
    ($ini[$key].GetEnumerator() | 
        Where-Object { $_.key -like "Setting4" } | 
            Format-Table -HideTableHeaders | Out-String).trim();
    Write-host "" 
}
Read-Host -Prompt "Press Enter to exit"

Отображаемые результаты такие, как показано здесь, как вы можете видеть с .ini файл с 6 ключами и 20 ключами внутри, этот список становится очень длинным.

General settings
Settings1 and Settings2 are set to:

Setting3 is set to:  

Setting4 is set to:


KPROD
Settings1 and Settings2 are set to:
setting1                       1
setting2                       2
Setting3 is set to: 
setting3                       3
Setting4 is set to:
setting4                       4

KTEST
Settings1 and Settings2 are set to:
setting1                       1
setting2                       2
Setting3 is set to: 
setting3                       3
Setting4 is set to:
setting4                       4

KDEV
Settings1 and Settings2 are set to:
setting1                       1
setting2                       2
Setting3 is set to: 
setting3                       55
Setting4 is set to:
setting4                       4

Press Enter to exit: 

Возможно ли вообще достичь моей цели? Я бы хотел, чтобы это выглядело как ...

KPROD
Settings1 and Settings2 are set to:
setting1                       1
setting2                       2
Setting3 is set to: 
setting3                       3
Setting4 is set to:
setting4                       4

KMDEV
Setting3 is set to: 
setting3                       55
Import-Module PSIni
$Ini = Get-IniContent 'Example.ini'

#List the name and value of all the KPROD keys
Write-Host "`nKPROD Settings"
$Ini['KPROD'].Keys | ForEach-Object { "$_ is set to $($Ini['KPROD'].$_)" 
}

#Use a ForEach loop so we don't have to duplicate code to check the two 
other sections
ForEach ($Section in 'KTEST','KDEV') {
    Write-Host "`n$Section Settings"

    $Ini[$Section].Keys | ForEach-Object {
        #Uses a ForEach-Object loop to check through all of the Keys in 
the current section and compare them to the same named key in the KPROD 
section, outputting them if they differ   
        If ($Ini[$Section].$_ -ne $Ini['KPROD'].$_) { "$_  is set to 
$($Ini[$Section].$_)" }
    }
}