我正在尝试.ini
使用磷脂酰肌醇( 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
答案1
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].$_)" }
}
}