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

如何将PowerShell输出的自定义对象转换为Markdown表格文件

实现方案

首先纠正一个命令使用误区:ConvertFrom-Markdown的作用是将已有的Markdown内容解析为PowerShell对象,你需要的是PowerShell自定义对象转Markdown表格,有两种可行实现:


方案1:PowerShell 7+ 原生命令实现(推荐)

PowerShell 7及以上版本自带ConvertTo-Markdown命令,直接输出对象数组即可自动生成标准Markdown表格。

修改后完整代码:

$xmlPath    = 'C:\\Users\\jonb\\Desktop\\bom.xml'
$ns = @{a = 'http://cyclonedx.org/schema/bom/1.2'} 
$xPath = '//a:component'
$components = Select-Xml -Path $xmlPath -XPath $xPath -Namespace $ns
# 初始化结果数组
$results = @()

foreach ($component in $components) {    
  $name = (Select-Xml -Xml $component.Node -XPath './/a:name/text()' -Namespace $ns).Value
  $version = (Select-Xml -Xml $component.Node -XPath './/a:version/text()' -Namespace $ns).Value
  $lic_cond = (Select-Xml -Xml $component.Node -XPath './/a:license/a:id/text()' -Namespace $ns).Value

  $license = If ($lic_cond) {$lic_cond} Else {"NA"} 

  $finalObject = [pscustomobject]@{
        'Name'          = $name
        'Version'       = $version
        'License'       = $license
    }
  $results += $finalObject
}

# 直接打印Markdown表格
$results | ConvertTo-Markdown
# 如果要保存到本地文件可使用以下代码
# $results | ConvertTo-Markdown | Out-File -FilePath "C:\Users\jonb\Desktop\components.md" -Encoding utf8

方案2:PowerShell 5.1 及更低版本手动实现

如果你的运行环境是低版本PowerShell,没有原生转换命令,可以自定义转换函数实现:

完整代码:

# 自定义Markdown表格转换函数
function ConvertTo-MDTable {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        [PSObject[]]$InputObject
    )
    begin {
        $objects = @()
    }
    process {
        $objects += $InputObject
    }
    end {
        # 生成表头
        $headers = $objects[0].PSObject.Properties.Name
        "| $($headers -join ' | ') |"
        # 生成表头分隔线
        "| $($headers | ForEach-Object { '-' * $_.Length } -join ' | ') |"
        # 生成每行数据
        foreach ($obj in $objects) {
            $row = $headers | ForEach-Object { $obj.$_ }
            "| $($row -join ' | ') |"
        }
    }
}

$xmlPath    = 'C:\\Users\\jonb\\Desktop\\bom.xml'
$ns = @{a = 'http://cyclonedx.org/schema/bom/1.2'} 
$xPath = '//a:component'
$components = Select-Xml -Path $xmlPath -XPath $xPath -Namespace $ns
$results = @()

foreach ($component in $components) {    
  $name = (Select-Xml -Xml $component.Node -XPath './/a:name/text()' -Namespace $ns).Value
  $version = (Select-Xml -Xml $component.Node -XPath './/a:version/text()' -Namespace $ns).Value
  $lic_cond = (Select-Xml -Xml $component.Node -XPath './/a:license/a:id/text()' -Namespace $ns).Value

  $license = If ($lic_cond) {$lic_cond} Else {"NA"} 

  $finalObject = [pscustomobject]@{
        'Name'          = $name
        'Version'       = $version
        'License'       = $license
    }
  $results += $finalObject
}

# 调用自定义函数生成表格
$results | ConvertTo-MDTable

补充说明

你原有代码中Select-Xml返回的是SelectXmlInfo类型对象,直接赋值给属性会携带多余上下文信息,代码中新增的.Value是为了直接提取匹配到的文本内容,保证表格输出格式正常。

内容的提问来源于stack exchange,提问作者bobby17jones

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:30:02