以下脚本在我的CSV文件中不会生成相关文件的路径。相反,它给了我System.Object []。请告诉我这里做错了什么。
我的目标是清理多余的GPO。我需要从GPO备份中搜索xml文件并进行分析。如果我在两个或多个GPO中找到相同的自定义字符串,该路径将显示哪个文件夹包含冗余字符串,并且可以组合GPO或一起删除一个。有道理..我希望?
以下是我得到的结果:第一行是计数,第三行是该行的值,第二行是System.Object,它应该显示路径,如
C:\ gpobackup \ 00A72CC5-7935-4F97-A40B-68DE0ED927BF
1 System.Object [] Identifier xmlns =" http://www.microsoft.com/GroupPolicy/Types"> {548FF13C-4CDD-43C7-8C59-D19087424B16}
5 System.Object [] Domain xmlns =" http://www.microsoft.com/GroupPolicy/Types"> corp.domain.net
5 System.Object []
1 System.Object [] Name> Exchange Move - SNY SPA - 启用PST归档
5 System.Object [] IncludeComments> true
$ht = @()
$files = Get-ChildItem -recurse -Filter *.xml
foreach ($file in $files)
{
$path = $file.FullName
$lines = Get-Content $path
foreach ($line in $lines)
{
if ($match = $ht | where { $_.line -EQ $line })
{
$match.count = $match.count + 1
$match.Paths += $path
}
else
{
$ht += new-object PSObject -Property @{
Count = 1
Paths = @(, $path)
Line = $line
}
}
}
}
$ht
$ht.GetEnumerator() | select Count, Paths, Line | Export-Csv c:\temp\NLG_GPO_Sort.csv
答案 0 :(得分:3)
Export-Csv
不会奇怪地使用数组值扩展属性。你需要自己做:
$ht.GetEnumerator() |
select Count, @{n='Paths';e={$_.Paths -join '|'}}, Line |
Export-Csv c:\temp\NLG_GPO_Sort.csv