清理配置文件

时间:2012-08-30 15:33:45

标签: powershell

我正在尝试编写这个PS剧本,但是如果有人打败我,我肯定他们会得到免费的业力。

无论如何,这就是我想要采用像这样的文件设置

foo.bar=Some random text is stored here
foo.bar=Lazy maintainers make me angry
bar.foo=Hello World!
bar.foo=Hello World!

主要目标是删除任何重复的条目,我有几个。 。 。

这似乎很容易
Get-Content c:\list.txt | Select-Object -Unique 

但我还想将具有相同密钥标识符的任何冲突存储到一个单独的文件中,以便我可以查看我应该保留哪些。

我还是PS新手,还没有找到一个好方法。

1 个答案:

答案 0 :(得分:3)

您可以使用Group-Object将具有相同密钥的项目组合在一起。然后查找其中包含多个元素的组(表示重复的条目)。最后,将它们打印到某处的文件中:

# raw content
$lines = Get-Content C:\data.txt

# package each line into a little object with properties Key and Val
$data = $lines |%{ $key,$val = $_.Split('='); new-object psobject -prop @{Key = $key; Val = $val} }

# group the objects by key, only keep groups with more than 1 element
$duplicates = $data | group Key |?{$_.Count -gt 1}

# print out each key and the different values it has been given
$duplicates |%{ "--- [$($_.Name)] ---"; $_.Group | select -expand Val }

结果:

--- [foo.bar] ---
Some random text is stored here
Lazy maintainers make me angry
--- [bar.foo] ---
Hello World!
Hello World!

如果要存储在日志中,可以将其传输到Out-File