编写PowerShell脚本将OpenVAS扫描CSV转换为Jira批量导入格式
优化PowerShell脚本:合并同漏洞主机到单个Jira CSV条目
这绝对是个能提升Jira工单整洁度的好需求!我之前帮用户处理过类似的OpenVAS到Jira的CSV转换优化,正好可以给你一套可行的方案——既能保留原有脚本处理其他漏洞的独立条目功能,又能把所有存在“TCP Timestamps”漏洞的主机合并成一条Jira记录。
核心实现思路
- 读取OpenVAS导出的原始CSV文件,解析为PowerShell可操作的对象
- 按漏洞名称对所有扫描条目进行分组
- 针对“TCP Timestamps”分组:将所有受影响主机地址合并为一个列表,生成单个Jira条目
- 针对其他漏洞分组:保持原有逻辑,每个受影响主机生成独立的Jira条目
- 最终输出符合Jira导入规范的CSV文件
完整PowerShell脚本示例
# 配置文件路径(根据你的实际路径修改) $openvasCsvPath = ".\openvas_scan_results.csv" $jiraOutputCsvPath = ".\jira_vulnerability_import.csv" # 读取OpenVAS原始CSV(请根据你的实际导出字段调整表头名称) $openvasData = Import-Csv -Path $openvasCsvPath -Delimiter "," # 按漏洞名称分组处理 $groupedVulns = $openvasData | Group-Object -Property "VulnerabilityName" # 初始化Jira条目数组 $jiraEntries = @() foreach ($vulnGroup in $groupedVulns) { $vulnName = $vulnGroup.Name $vulnRecords = $vulnGroup.Group # 处理"TCP Timestamps"漏洞:合并所有受影响主机 if ($vulnName -eq "TCP Timestamps") { # 提取并去重主机地址,用换行符分隔便于Jira展示 $affectedHosts = ($vulnRecords.Host | Select-Object -Unique) -join "`n" # 取第一条记录的漏洞描述、严重等级(假设同漏洞的描述/等级一致) $vulnDesc = $vulnRecords[0].Description $severity = $vulnRecords[0].Severity # 构建Jira条目对象(根据你的Jira字段配置调整) $mergedEntry = [PSCustomObject]@{ "Summary" = "[$severity] $vulnName - 多台主机受影响" "Description" = "**受影响主机列表:**`n$affectedHosts`n`n**漏洞详情:**`n$vulnDesc" "Issue Type" = "漏洞" "Labels" = "openvas,tcp-timestamps" "Priority" = switch ($severity) { "Critical" { "最高" } "High" { "高" } "Medium" { "中" } default { "低" } } } $jiraEntries += $mergedEntry } # 处理其他漏洞:每个主机生成独立条目 else { foreach ($record in $vulnRecords) { $singleEntry = [PSCustomObject]@{ "Summary" = "[$($record.Severity)] $vulnName - $($record.Host)" "Description" = "**受影响主机:** $($record.Host)`n`n**漏洞详情:**`n$($record.Description)" "Issue Type" = "漏洞" "Labels" = "openvas,$($vulnName.ToLower().Replace(" ","-"))" "Priority" = switch ($record.Severity) { "Critical" { "最高" } "High" { "高" } "Medium" { "中" } default { "低" } } } $jiraEntries += $singleEntry } } } # 导出为Jira可导入的CSV(UTF8编码避免乱码) $jiraEntries | Export-Csv -Path $jiraOutputCsvPath -Delimiter "," -NoTypeInformation -Encoding UTF8 Write-Host "转换完成!输出文件路径:$jiraOutputCsvPath"
关键细节说明
- 字段适配:脚本中的
VulnerabilityName、Host、Description是假设的OpenVAS导出字段,你需要根据自己的实际CSV表头修改这些名称 - Jira字段映射:
Summary、Issue Type、Labels等是Jira导入时的常用字段,可根据团队的Jira配置调整字段名和内容 - 去重处理:用
Select-Object -Unique确保合并的主机列表没有重复项 - 编码设置:导出时指定
-Encoding UTF8,避免Jira导入时出现中文乱码问题
你可以先用脱敏后的测试数据跑一遍脚本,调整字段匹配后就能完美适配你的需求啦!
内容的提问来源于stack exchange,提问作者user9522871
相关产品推荐
相关产品推荐

