System.Object []而不是数组

时间:2015-05-15 17:11:53

标签: powershell csv

以下脚本在我的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

1 个答案:

答案 0 :(得分:3)

Export-Csv不会奇怪地使用数组值扩展属性。你需要自己做:

$ht.GetEnumerator() |
  select Count, @{n='Paths';e={$_.Paths -join '|'}}, Line |
  Export-Csv c:\temp\NLG_GPO_Sort.csv