【问题标题】:PowerShell; Need help import CSV into system.collection.arraylist电源外壳;需要帮助将 CSV 导入 system.collection.arraylist
【发布时间】:2020-12-29 17:08:45
【问题描述】:

*Doug Maurer 和 Mathias R. Jessen 的 cmets 已重述此问题

我正在尝试处理从 Nessus 合规性和漏洞扫描中导出的 .CSV 文件。我将所有格式相同的 CSV 文件合并在一起,剩下一个新的 CSV 文件,该文件平均约为 90,000 条记录和 26 个属性。

我需要: (1) 删除描述属性中所有带有字符串“[PASSED]”的行 (2a) 合并为一条记录,每条记录的“主机”属性中的所有数据都具有相同的“描述”属性 (2b) 删除所有具有相同“描述”属性的记录;具有合并“主机”属性的记录除外

我目前有一个将 Microsoft Excel 与 PowerShell 结合的解决方案,但脚本需要 8 天才能运行;我认为我可以通过从脚本中删除 Excel 并仅处理 PowerShell 对象或类似对象中的数据来加快处理速度。

我知道当涉及到我要处理的数据量时,PowerShell 数组效率低下,但有人告诉我 [system.collection.arraylist] 效率要高得多;所以我尝试使用下面的方法创建一个多维数组,但没有成功。

$list=Import-CSV ./MasterCompliance.csv

$array=[System.Collections.ArrayList]@(,($list.'Plugin ID'),($List.CVE),($List.CVSS),($List.Risk),($List.Host),($List.Protocol),($List.Port),($List.Name),($List.Synopsis),($List.Description),($List.Solution),($List.'See Also'),($List.'Plugin Output'),($List.'STIG Severity'),($List.'CVSS v3.0 Base Score'),($List.'CVSS Temporal Score'),($List.'CVSS v3.0 Temporal Score'),($List.'Risk Factor'),($List.BID),($List.XREF),($List.MSKB),($List.'Plugin Publication Date'),($List.'Plugin Modification Date'),($List.Metasploit),($List.'Core Impact'),($List.CANVAS)) 

上面的代码只生成了一个包含 26 条记录的单维数组......而不是包含所有记录和 26 维的数组。

我不必坚持使用数组,如果这对不同的对象类型更有效,我也会对此持开放态度。

【问题讨论】:

  • 我认为您可能有 xy 问题。您以哪种方式导入/使用效率低下?
  • 如果您有 90K 行,您可能希望避免一次将它们全部存储在内存中。同意@DougMaurer,这听起来像xy problem

标签: .net powershell csv arraylist


【解决方案1】:

主要问题不是数组,问题是这里的import-csv。

您有以下选择:

1.) 您可以尝试使用 -readcount 获取内容,然后转换为 csv。

2.) (可能是最有效的)正在使用 .net 流阅读器,请参见例如这里 https://www.sqlshack.com/reading-file-data-with-powershell/ 或者 More efficient way of using Import-CSV in powershell

3.) arraylist 的使用在 powershell 中运行良好,以及如何使用它们,例如这里: https://adamtheautomator.com/powershell-arraylist/

我建议您使用带有数组列表的 .net 阅读器

问候

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 2013-07-06
    • 2018-07-28
    • 2011-06-06
    • 1970-01-01
    相关资源
    最近更新 更多