如何将多字段服务器信息合并为格式化单字符串传入Pscribo?
解决思路
方法1:格式化字符串为指定格式
通过ForEach-Object遍历$msg集合,用PowerShell格式化字符串语法控制列宽,生成符合要求的字符串数组:
# 生成格式化后的字符串数组 $formattedLines = $msg | ForEach-Object { # {0,-12} 表示第一个参数左对齐占12字符;{1,-6} 第二个参数左对齐占6字符,可按需调整宽度 "{0,-12} {1,-6} {2}" -f $_.ServerName, $_.Status, $_.Message } # 传入Pscribo输出报告 $report = New-PScriboDocument $formattedLines | ForEach-Object { $report | Add-PScriboParagraph -Text $_ } $report | Export-PScriboDocument -Path .\ServerStatusReport.docx
方法2:直接使用Pscribo表格功能(推荐)
Pscribo原生支持表格渲染,无需手动格式化字符串,直接传入对象集合并指定列即可,排版更规范美观:
$report = New-PScriboDocument # 添加表格,指定要显示的属性列,可自定义表头文本 $report | Add-PScriboTable -InputObject $msg ` -Columns ServerName, Status, Message ` -Headers "服务器名称", "状态", "消息" ` -Style LightGridAccent1 # 可选:指定表格样式 $report | Export-PScriboDocument -Path .\ServerStatusReport.docx
方法3:给对象添加格式化文本属性
如果需要保留原对象结构同时增加格式化文本字段,可通过计算属性实现:
$msgWithFormattedText = $msg | Select-Object *, @{ Name = "FormattedLine" Expression = {"{0,-12} {1,-6} {2}" -f $_.ServerName, $_.Status, $_.Message} } # 提取格式化文本传入Pscribo $report = New-PScriboDocument $msgWithFormattedText.FormattedLine | ForEach-Object { $report | Add-PScriboParagraph -Text $_ } $report | Export-PScriboDocument -Path .\ServerStatusReport.docx
补充说明
直接传入$msg到Pscribo时字段为空,大概率是因为Pscribo默认未自动识别对象的自定义属性,明确指定列(表格方式)或转换为字符串后传入即可解决问题。
内容的提问来源于stack exchange,提问作者vBrit
相关产品推荐
相关产品推荐

