You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:01:56