Powershell调整格式table宽度

Powershell adjust the format table width

这是脚本

get-childitem D:\media\*.mkv -recurse | Select-Object -Property name,  @{n='Resolution';expression={mediainfo $_.FullName --inform="Video;%Width%x%Height%"}}

输出为

Name                      Resolution
----                      ----------
Video File -Copy (2).mkv 1920x1080 
Video File -Copy (3).mkv 1920x1080 
Video File -Copy (4).mkv 1920x1080 
Video File -Copy (5).mkv 1920x1080 
Video File -Copy (6).mkv 1920x1080 
Video File -Copy (7).mkv 1920x1080 
Video File -Copy.mkv     1920x1080 
Video File.mkv           1920x1080 

但是如果文件名字符很大,解析列信息会丢失。名称列信息重叠。

我读了这个页面https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/format-table?view=powershell-7.2

但我不确定如何实现 属性 宽度或自动大小。

可以使用Format-Table with a calculated property来限制Name列的宽度;例如:

... | Format-Table @{ Name='Name'; Expression = 'Name'; Width = 60 }, Resolution

然后在 Windows PowerShell / PowerShell (Core) 7+ 中使用 ... / 截断较长的值。您可以添加 -Wrap 以完整显示它们,根据需要分布在任意多行中。

另一种方法——它不会很好地呈现在屏幕上——是通过管道传输到 Out-String 并使用它的 -Width 参数和一个 terminal-column 足够大的计数来容纳所有 table 列:

... | Out-String -Width 300

注意:对于您的输出对象,Format-Table 格式是 隐含的 (它们具有 4 个或更少的属性),这就是上面没有明确调用它的原因。

顺便说一句:

  • Format-Table -Autosize 没有 帮助,因为它不能确保显示所有列 - 请参阅 了解更多信息。

示例代码:

[pscustomobject] @{
  Name = 'x' * 80 + 'y'
  Resolution = '1920x1080'
},
[pscustomobject] @{
  Name = 'x' * 280 + 'z'
  Resolution = '2560x1600'
} |
  Format-Table -Wrap @{ Name='Name'; Expression = 'Name'; Width = 60 }, Resolution

输出:

Name                                                         Resolution
----                                                         ----------
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 1920x1080
xxxxxxxxxxxxxxxxxxxxy
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 2560x1600
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxz