PowerShell 将 Format-Table 用于表格输出

如果你在没有指定属性名称的情况下使用 Format-Table cmdlet 来格式化 Get-Process 命令的输出,你所得到的输出会和未使用 Format cmdlet 执行任何格式设置时得到的完全一样。 默认情况下,PowerShell 以表格格式显示 Process 对象 。

PS C:/Users/maxsu> Get-Service -Name win* | Format-Table

Status   Name               DisplayName
------   ----               -----------
Stopped  WinDefend          Windows Defender Antivirus Service
Running  WinHttpAutoProx... WinHTTP Web Proxy Auto-Discovery Se...
Running  Winmgmt            Windows Management Instrumentation
Stopped  WinRM              Windows Remote Management (WS-Manag...

改进 Format-Table 输出(自动调整大小)
尽管表格视图对显示大量信息很有用,但如果显示区域对于数据来说太窄,则可能导致数据难以理解。 在上面的示例中,输出被截断。 当你运行 Format-Table 命令时,如果你指定 AutoSize 参数,PowerShell 会根据显示的实际数据来计算列宽。 这使得列可读。

PS C:/Users/maxsu> Get-Service -Name win* | Format-Table -AutoSize

Status  Name                DisplayName
------  ----                -----------
Stopped WinDefend           Windows Defender Antivirus Service
Running WinHttpAutoProxySvc WinHTTP Web Proxy Auto-Discovery Service
Running Winmgmt             Windows Management Instrumentation
Stopped WinRM               Windows Remote Management (WS-Management)

Format-Table cmdlet 仍可能会截断数据,但仅会在屏幕的末尾处进行截断。 除最后一个显示的属性外,会让所有属性获得各自所需的大小,以使最长的数据元素得以正确显示。

PS C:/Users/maxsu> Get-Service -Name win* | Format-Table -Property Name,Status,StartType,DisplayName,DependentServices -AutoSize

Name                 Status StartType DisplayName                               DependentServices
----                 ------ --------- -----------                               -----------------
WinDefend           Stopped    Manual Windows Defender Antivirus Service        {}
WinHttpAutoProxySvc Running    Manual WinHTTP Web Proxy Auto-Discovery Service  {NcaSvc, iphlpsvc}
Winmgmt             Running Automatic Windows Management Instrumentation        {VMwareHostd, VMUSBArbService, VMAut...
WinRM               Stopped    Manual Windows Remote Management (WS-Management) {}

Format-Table 命令假设按重要性顺序列出属性。 因此,它会尝试完整显示离列表开头最近的那些属性。 如果 Format-Table 命令无法显示所有属性,则会从显示中删除某些列。 可以在 DependentServices 属性前一个示例中查看此行为 。
让列中的 Format-Table 输出自动换行 (Wrap)
可以通过使用 Wrap 参数让较长的 Format-Table 数据在其显示列中自动换行 。 使用 Wrap 参数可能不会实现所需的操作,因为如果你不同时指定 AutoSize,它会使用默认设置 :

PS C:/Users/maxsu> Get-Service -Name win* | Format-Table -Property Name,Status,StartType,DisplayName,DependentServices -Wrap

Name                 Status StartType DisplayName                               DependentServices
----                 ------ --------- -----------                               -----------------
WinDefend           Stopped    Manual Windows Defender Antivirus Service        {}
WinHttpAutoProxySvc Running    Manual WinHTTP Web Proxy Auto-Discovery Service  {NcaSvc, iphlpsvc}
Winmgmt             Running Automatic Windows Management Instrumentation        {VMwareHostd, VMUSBArbService, VMAuthdS
                                                                                ervice, NcaSvc...}
WinRM               Stopped    Manual Windows Remote Management (WS-Management) {}

使用 Wrap 参数基本不会减慢进程速度 。 但是,使用 AutoSize 格式化大型目录结构的递归文件列表可能得耗用大量时间和内存,才能显示第一批输出项 。
如果你并不关心系统负载,那么结合使用 AutoSize 和 Wrap 参数则会获得良好的效果 。 初始列仍根据需要最大限度地使用宽度来在一行上显示项,但在必要时将最后一列换行。

备注:当你首先指定最宽的列时,可能不会显示某些列。 为了获得最佳结果,请先指定最小的数据元素。

在下面的示例中,我们首先指定最宽的属性。

PS C:/Users/maxsu> Get-Process -Name vm* | Format-Table -Wrap -AutoSize -Property FileVersion,Path,Name,Id

FileVersion Path Name                     Id
----------- ---- ----                     --
                 vmnat                  3988
                 vmnetdhcp              3960
                 vmware-authd           5036
                 vmware-hostd           5724
                 vmware-usbarbitrator64 4432

组织选项卡输出 (-GroupBy)
用于表格输出控制的另一个有用参数是 GroupBy。 较长的列表可能尤其难以进行比较。 GroupBy 参数基于属性值对输出进行分组 例如,我们可以按 StartType 对服务分组以便于检查,同时从属性列表中省略 StartType 值 :

PS C:/Users/maxsu> Get-Service -Name win* | Sort-Object StartType | Format-Table -GroupBy StartType


   StartType:Automatic

Status   Name               DisplayName
------   ----               -----------
Running  Winmgmt            Windows Management Instrumentation


   StartType:Manual

Status   Name               DisplayName
------   ----               -----------
Stopped  WinRM              Windows Remote Management (WS-Manag...
Stopped  WinDefend          Windows Defender Antivirus Service
Running  WinHttpAutoProx... WinHTTP Web Proxy Auto-Discovery Se...

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/264545.html

(0)
上一篇 2022年6月7日 14:03
下一篇 2022年6月7日 14:04

相关推荐

发表回复

登录后才能评论