0

I am trying to pull data from a .ini file using the PSIni (Get-IniContent). I have a format that works but generates too much data. My ini file looks like this :

[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 

I would like to exclude anything from [General settings] from being populated in my output. As they show up blank because I do not need to gather that information as I specify in my code below. The only data I care to see is [KPROD] keys and values, but if the values are different in [KDEV] and [KTEST] I would like to display the values that do not match. Here is my current code:

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" 

The results displayed are as shown here as you can see with a .ini file with 6 keys and 20 keys within, this list gets very long.

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: 

Is it even possible to achieve my goal? I would love for it to just look like...

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 

1 Answer 1

0
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].$_)" } } } 

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.