【发布时间】:2021-01-25 12:53:58
【问题描述】:
我有一个 cmdlet,它使用 Format-Table 输出可能很长的字符串(例如注册表路径)。我想将每列宽度设置为输出缓冲区宽度除以列数。
例子:
function Write-Something {
[CmdletBinding()] param()
$o = [pscustomobject]@{ a = 'A' * 100; b = 'B' * 100 }
$columnWidth = [int]( $PSCmdlet.Host.UI.RawUI.BufferSize.Width / 2 )
$o | Format-Table @{ e = 'a'; width = $columnWidth }, @{ e = 'b'; width = $columnWidth } -wrap
}
这非常适用于控制台输出,它会产生如下输出:
一个 - - 啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 AAAAAAAAAAAA BBBBBBBBBBBB问题
当我使用Out-String 或Out-File 的Width 参数指定不同的输出缓冲区宽度时,格式不会改变,它仍将基于控制台缓冲区宽度。
Write-Something | Out-File test.txt -Width 200
这会产生与上面相同的输出,而预期的输出应该是宽度为 100 的列,并且不会发生换行。
如何从我的 cmdlet 中获取由 Out-String 或 Out-File 的 Width 参数设置的实际输出缓冲区宽度?
【问题讨论】:
标签: powershell