2017-09-02 45 views
1

我試圖使用PSIni module命令Get-IniContent從.ini文件中提取數據。我有一個可行的腳本,但它產生的數據比我需要的要多。從ini創建一個輸出到powershell - 高級

我的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 

我想排除我的輸出[常規設置]什麼。我想看到的唯一數據是[KPROD]部分的鍵和值以及[KDEV]和[KTEST]部分中與[KPROD]中不同的值。

這裏是我當前的代碼:

ipmo psini 
$ini = Get-IniContent "C:\Temp\test1.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" 

這是目前的結果是:

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 

回答

2

我認爲這會給你你想要的東西:

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

如果你不熟悉它,上面用ForEach-Object環內和在每次迭代它存在的自動變量$_包含被枚舉當前的項目,這在我們的例子是名來自我們正在檢查的部分的設置。

+1

馬克,非常感謝你!就是這樣。我忘了使用$ _變量!在這種情況下,這正是我所需要的! – user951376