PowerShell5.1/Azure DevOps Server2019表格末列标题异常换行问题
问题触发原因
这个异常换行和Azure DevOps日志展示区域宽度没有关系,是PowerShell 5.1版本自带的表格格式化机制bug,触发逻辑如下:
- 你使用
Invoke-Sqlcmd -OutputAs DataTables返回的是标准.NETDataTable类型对象,PowerShell 5.1默认会调用Format-Table把这类对象转换成纯文本表格输出到日志流里。 - 这个版本的
Format-Table在计算列宽、渲染表头时存在已知缺陷:如果表格最后一列的任意单元格内容包含换行符(你的Result列存储的SQL返回结果本身带多行文本,就符合这个触发条件),格式化逻辑会错误地给最后一列的列标题尾部插入硬换行符,哪怕当前输出行的剩余宽度完全足够放下完整的列标题文本。 - 这个问题和Azure DevOps的日志渲染逻辑无关,你把同样的DataTable对象放到本地PowerShell 5.1控制台直接输出,或者重定向到本地文本文件查看,一样能看到最后一列的“Result”标题被异常换行。
你可以在本地PowerShell 5.1环境运行以下代码直接复现该问题:
$testDt = New-Object System.Data.DataTable $testDt.Columns.Add("ID", [int]) $testDt.Columns.Add("Result", [string]) $newRow = $testDt.NewRow() $newRow.ID = 1 $newRow.Result = "第一行内容`n第二行内容" $testDt.Rows.Add($newRow) $testDt | Format-Table
这个缺陷在后续的PowerShell 7+版本中已经被修复,不会再出现同类表头异常换行的问题。
内容的提问来源于stack exchange,提问作者Rod
相关产品推荐
相关产品推荐

