如何用PowerShell按漏洞名称拆分漏洞扫描CSV文件为多个文件?
解决方案:按漏洞名称拆分生成独立CSV文件
看起来你已经完成了漏洞扫描数据的初步清洗工作,现在只需要补充按漏洞名称分组并生成独立CSV文件的核心逻辑即可。我帮你完善了PowerShell代码,完全贴合你的需求:
# 1. 导入原始漏洞扫描CSV文件 $all = Import-Csv c:\scan.csv # 2. 过滤掉Risk为"None"的无风险条目 $filteredData = $all | Where-Object {$_.Risk -ne "None"} # 3. 提取所需字段并按漏洞名称排序,方便后续分组 $processedData = $filteredData | Select-Object Name, Host, Risk, CVSS, CVE, Description, Solution, 'See Also' | Sort-Object Name # 4. 按漏洞名称对数据进行分组 $groupedByVuln = $processedData | Group-Object -Property Name # 5. 循环生成编号格式的独立CSV文件 $counter = 1 foreach ($group in $groupedByVuln) { # 生成V001、V002格式的文件名,自动补零保证编号统一为三位 $fileName = "C:\V{0:D3}.csv" -f $counter # 将当前漏洞组的所有受影响主机数据导出为CSV $group.Group | Export-Csv -Path $fileName -NoTypeInformation -Encoding UTF8 # 计数器递增,准备下一个漏洞文件的命名 $counter++ } # 可选:保留你原本需要的合并总表导出 $processedData | Export-Csv C:\final.csv -NoTypeInformation -Encoding UTF8
关键细节说明:
- 分组逻辑:通过
Group-Object -Property Name将相同漏洞名称的条目归为一组,确保每个文件只包含单个漏洞的所有受影响主机数据。 - 标准化命名:使用
"V{0:D3}.csv"格式化字符串,自动为编号补零(比如第5个漏洞会生成V005.csv),避免出现V1、V10这类格式混乱的文件名。 - 编码与格式优化:添加
-NoTypeInformation避免CSV头部生成多余的类型注释,-Encoding UTF8确保中文描述、解决方案等特殊字符能正常显示。
小提示:
- 如果想把生成的漏洞文件统一放到指定文件夹,直接修改
$fileName的路径即可,比如改为"C:\Vulnerability_Reports\V{0:D3}.csv"。 - 若要验证分组是否正确,可以先执行
$groupedByVuln | Select-Object Name, Count,快速查看每个漏洞对应的受影响主机数量。
内容的提问来源于stack exchange,提问作者ViperGDC
相关产品推荐
相关产品推荐

