PowerShell解析CycloneDX BOM XML时处理许可、筛选链接及关联名称的问题
PowerShell解析CycloneDX 1.2 BOM XML解决方案
1. 无许可信息组件字段填充
直接使用以下判断逻辑替换你原有许可处理代码即可,兼容CycloneDX 1.2标准的许可节点结构:
# 遍历组件时提取许可信息 $licenseText = if ($null -ne $component.licenses -and $null -ne $component.licenses.license) { # 支持多许可场景,用分号拼接 ($component.licenses.license | ForEach-Object { $_.id ?? $_.name }) -join ';' } else { "No License" }
2. 提取type为website的外部引用链接
通过属性过滤即可精准匹配目标链接,避免输出所有引用:
$officialUrl = ($component.externalReferences.reference | Where-Object { $_.type -eq 'website' }).url | Select-Object -First 1 # 无匹配链接时赋值为空字符串避免后续逻辑报错 $officialUrl = $officialUrl ?? ""
3. 组件名称关联可跳转链接
不需要使用New-Item Junction,根据你最终输出的文件格式拼接对应链接规则即可:
- 若输出为Markdown格式,使用如下拼接逻辑:
$componentDisplay = if ($officialUrl) { "[$($component.name)]($officialUrl)" } else { $component.name } - 若输出为Excel可识别的格式,使用如下拼接逻辑:
$componentDisplay = if ($officialUrl) { "=HYPERLINK("$officialUrl","$($component.name)")" } else { $component.name } - 若输出为HTML格式,使用如下拼接逻辑:
$componentDisplay = if ($officialUrl) { "<a href="$officialUrl">$($component.name)</a>" } else { $component.name }
内容的提问来源于stack exchange,提问作者bobby17jones
相关产品推荐
相关产品推荐

