如何将Powershell输出的PSCustomObject对象转换为Markdown表格
解决方案
修复后的转换函数
下面的函数兼容你的使用场景,解决了原有函数流式处理导致的表头错位、格式不标准、空值兼容差的问题:
function ConvertTo-MarkDownTable { [CmdletBinding()] param ( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [PSObject[]]$InputObject ) begin { $allObjects = [System.Collections.Generic.List[PSObject]]::new() } process { $allObjects.AddRange($InputObject) } end { if ($allObjects.Count -eq 0) { return } # 取首个对象的属性作为统一表头,保证列顺序固定 $headerNames = $allObjects[0].PSObject.Properties.Name # 输出标准Markdown表头 "| $($headerNames -join ' | ') |" # 输出表头分隔行 "| $($headerNames.ForEach({ '-' * $_.Length }) -join ' | ') |" # 逐行输出内容,空值替换为空字符串避免列错位 foreach ($obj in $allObjects) { $rowValues = $headerNames | ForEach-Object { $obj.$_ ?? [string]::Empty } "| $($rowValues -join ' | ') |" } } }
调用方法
直接在你原有代码的输出端用管道调用该函数即可,示例如下:
$xmlFile = 'C:\Users\kraer\Desktop\bom.xml' [xml]$xml = Get-Content $xmlFile -Encoding UTF8 # 提取组件信息并直接转换为Markdown表格 $xml.bom.components.component | ForEach-Object { [PSCustomObject]@{ Name = $_.name Version = $_.version License = $_.licenses.license.id } } | ConvertTo-MarkDownTable # 如果需要导出到本地文件,可追加管道命令:| Out-File "组件清单.md" -Encoding UTF8
内容的提问来源于stack exchange,提问作者bobby17jones
相关产品推荐
相关产品推荐

