【问题标题】:System.Object[] instead of the actual path in the arraySystem.Object[] 而不是数组中的实际路径
【发布时间】:2015-05-15 17:11:53
【问题描述】:

下面的脚本不会在我的 CSV 文件中生成相关文件的路径。相反,它给了我 System.Object []。请告知我在这里做错了什么。

我的目标是清理多余的 GPO。我需要从 GPO 备份中搜索 xml 文件并对其进行分析。如果我在两个或多个 GPO 中找到相同的自定义字符串,路径将显示哪个文件夹包含冗余字符串,并且可以组合 GPO 或一起删除一个。有道理..我希望?
这是我得到的结果:第一行是计数,第三行是该行的值,第二行是 System.Object 应该显示路径,如

c:\gpobackup\00A72CC5-7935-4F97-A40B-68DE0ED927BF

1 System.Object[] 标识符 xmlns="http://www.microsoft.com/GroupPolicy/Types">{548FF13C-4CDD-43C7-8C59-D19087424B16}
5 System.Object[] 域 xmlns="http://www.microsoft.com/GroupPolicy/Types">corp.domain.net
5 System.Object[]
1 System.Object[] 名称>Exchange 移动 - 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

【问题讨论】:

  • 您的脚本并没有真正利用 PowerShell 的管道行为。剧本的最终目标是什么?我们或许可以重新设计它以提高工作效率。
  • @Bill 我的目标是清理多余的 GPO。我需要从 GPO 备份中搜索 xml 文件并对其进行分析。如果我在两个或多个 GPO 中找到相同的自定义字符串,路径将显示哪个文件夹包含冗余字符串,并且可以组合 GPO 或一起删除一个。有道理..我希望?
  • 如果您可以发布示例文件内容以及您期望的输出,这将有所帮助。
  • @Bill_Stewart 我添加了示例

标签: powershell csv


【解决方案1】:

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

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

【讨论】:

  • 完美运行 Ansgar。谢谢。
  • @Ken 这很可能是因为评估每个文件内容的代码添加了每个匹配行的路径。无论如何,您不应该这样处理 XML 文件。识别构成匹配 GPO 的条件(值、属性)并使用 XML 解析器检查这些条件。但是,这将是一个不同的问题,因此您应该将其作为新问题发布。一个快速而肮脏的解决方法(我不推荐)是选择唯一路径:@{n='Paths';e={($_.Paths | select -Unique) -join '|'}}
  • 感谢 Ansgar 的反馈。我将发布一个不同的问题。
猜你喜欢
  • 1970-01-01
  • 2020-02-24
  • 1970-01-01
  • 1970-01-01
  • 2014-12-11
  • 1970-01-01
  • 2022-12-14
  • 1970-01-01
  • 2017-11-08
相关资源
最近更新 更多