2017-11-07 22 views
0

コールセンターに新しい行が追加されると、定期的に更新する必要がある複数のINIファイルがあります。 get-inicontentスクリプトを使って比較しようとしている値を取得することができますが、IDセクションにはスペースが含まれていることがあります。各INIには、同じものにラベル付けされた複数のセクションがありますが、末尾には番号が付いています。 ACDセクションごとにIDが必要です。私のファイルの例と、1つのACDの値を得るために使用するものについては、以下を参照してください。以下のスクリプトは各値を返しますが、それぞれの値を個別に照会する必要があり、タブを持つもののスペースに注意してください。私は余分なスペースを無視するすべてのACD IDの結果を返す方法を見つけたいと思います。どんな助けでも大歓迎です。Get-IniContent Helpワイルドカードで特定のセクションを取得する

INI File: 
[ACD1] 
ID=1001 
[ACD2] 
    ID=1002 
[ACD3] 
    ID=1003 
[Extension1] 
ID=50001 
[Extension2] 
    ID=50002 

PS Script: 
$FileContents = Get-IniContent "C:\Temp\ScriptTest\CTISetupTest.ini" 
$FileContents.ACD1.ID 
$FileContents.ACD2.' ID' 
$FileContents.ACD3.'  ID' 

予想される結果は次のようになります。キーの上に

1001 
1002 
1003 
+0

私にとってはうまくいきます。折り返しスペースがなく、改行/改行が正しく設定されていることを確認してください。 (なぜ最初の場所にスペースがありますか?)。上のコンテンツを貼り付けて新しいiniファイルを再構築してみてください。 – iRon

+0

はい上記のクエリはうまく動作しますが、各IDで見つかったスペースを考慮して3つのクエリをすべて入れますが、ファイルに何百ものACDがあるため、ファイルを解析してすべてのACDxxxを見つけて戻す必要がありますそれぞれのID値。物事を明確にすることを願っています。 –

答えて

1

だけループACDで始まり、その後IDで終わるサブキーをループ。

$INI = Get-IniContent 'C:\Temp\ScriptTest\CTISetupTest.ini' 
$ACDKeys = ($INI).keys | Where-Object {$_ -like 'acd*'} 
foreach ($ACDKey in $ACDKeys) { 
    $IDKeys = $INI[$ACDKey].Keys | Where-Object {$_ -like '*ID'} 
    foreach ($IDKey in $IDKeys){ 
     $INI[$ACDKey][$IDKey] 
    } 
} 
+0

完璧なトリックでした。結果を適切にループする方法がわかりませんでした。それに感謝します。 –

関連する問題