Format-Table
将输出的格式设置为一个表。
语法
Format-Table
[[-Property] <Object[]>]
[-AutoSize]
[-RepeatHeader]
[-HideTableHeaders]
[-Wrap]
[-GroupBy <Object>]
[-View <string>]
[-ShowError]
[-DisplayError]
[-Force]
[-Expand <string>]
[-InputObject <psobject>]
[<CommonParameters>]
说明
Format-Table
cmdlet 将命令的输出格式设置为表,表中每列显示对象的选定属性。 对象类型确定每个列中显示的默认布局和属性。 可以使用 Property 参数选择要显示的属性。
PowerShell 使用默认格式化程序定义对象类型的显示方式。 可以使用 .ps1xml
文件创建自定义视图,这些视图显示具有指定属性的输出表。 创建自定义视图后,使用 View 参数将表与自定义视图一起显示。 有关视图的详细信息,请参阅 about_Format.ps1xml。
可以在显示对象之前使用哈希表向其添加计算属性,以及使用哈希表指定表格中的列标题。 若要添加计算属性,请使用 Property 或 GroupBy 参数。 有关哈希表的详细信息,请参阅 about_Hash_Tables。
示例
示例 1:格式化 PowerShell 主机
本示例显示有关表中 PowerShell 主机程序的信息。
Get-Host | Format-Table -AutoSize
Get-Host
cmdlet 获取表示主机的 System.Management.Automation.Internal.Host.InternalHost 对象。 对象将沿管道向下发送到 Format-Table
并显示在表中。 AutoSize 参数调整列宽以最大程度地减少截断。
示例 2:按 BasePriority 格式化进程
在此示例中,进程显示在具有相同 BasePriority 属性的组中。
Get-Process | Sort-Object -Property BasePriority | Format-Table -GroupBy BasePriority -Wrap
Get-Process
cmdlet 获取表示计算机上每个进程的对象,并将其沿管道向下发送到 Sort-Object
。 对象按其 BasePriority 属性的顺序进行排序。
存储的对象沿管道向下发送到 Format-Table
。 GroupBy 参数根据其 BasePriority 属性值将进程数据排列到组中。 Wrap 参数可确保数据不会被截断。
示例 3:按开始日期格式化进程
此示例显示有关计算机上运行的进程的信息。 对象将进行排序,并且 Format-Table
使用视图按对象的开始日期对其进行分组。
Get-Process | Sort-Object StartTime | Format-Table -View StartTime
Get-Process
获取表示计算机上运行的进程的 System.Diagnostics.Process 对象。 对象沿管道向下发送到 Sort-Object
,并根据 StartTime 属性进行排序。
存储的对象沿管道向下发送到 Format-Table
。 View 参数指定在 PowerShell DotNetTypes.format.ps1xml
文件中为 System.Diagnostics.Process 对象定义的 StartTime 视图。 StartTime 视图将每个进程的开始时间转换为短日期,然后按开始日期对进程进行分组。
DotNetTypes.format.ps1xml
文件包含进程的 Priority 视图。 可以使用自定义视图创建自己的 format.ps1xml
文件。
示例 4:对表输出使用自定义视图
在此示例中,自定义视图显示目录的内容。 自定义视图将 CreationTime 列添加到 Get-ChildItem
创建的 System.IO.DirectoryInfo 和 System.IO.FileInfo 对象的表输出中。
此示例中的自定义视图是从 PowerShell 源代码中定义的视图创建的。 有关视图和用于创建此示例视图的代码的详细信息,请参阅 about_Format.ps1xml。
Get-ChildItem -Path C:\Test | Format-Table -View mygciview
Directory: C:\Test
Mode LastWriteTime CreationTime Length Name
---- ------------- ------------ ------ ----
d----- 11/4/2019 15:54 9/24/2019 15:54 Archives
d----- 8/27/2019 14:22 8/27/2019 14:22 Drawings
d----- 10/23/2019 09:38 2/25/2019 09:38 Files
-a---- 11/7/2019 11:07 11/7/2019 11:07 11345 Alias.txt
-a---- 2/27/2019 15:15 2/27/2019 15:15 258 alias_out.txt
-a---- 2/27/2019 15:16 2/27/2019 15:16 258 alias_out2.txt
Get-ChildItem
获取当前目录 C:\Test
的内容。 System.IO.DirectoryInfo 和 System.IO.FileInfo 对象沿管道向下发送。
Format-Table
使用 View 参数指定包含 CreationTime 列的自定义视图 mygciview。
The default Format-Table
output for Get-ChildItem
doesn't include the CreationTime column.
示例 5:对表输出使用属性
此示例使用 Property 参数在显示属性 Name 和 DependentServices 的两列表中显示计算机的所有服务。
Get-Service | Format-Table -Property Name, DependentServices
Get-Service
获取计算机上的所有服务,并将 System.ServiceProcess.ServiceController 对象沿管道向下发送。 Format-Table
使用 Property 参数指定在表中显示 Name 和 DependentServices 属性。
Name 和 DependentServices 是对象类型的两个属性。 若要查看所有属性:Get-Service | Get-Member -MemberType Properties
。
示例 6:格式化进程并计算其运行时间
此示例显示一个表,其中包含本地计算机的记事本进程的进程名称和总运行时间。 总运行时间是通过从当前时间减去每个进程的开始时间而计算出来的。
Get-Process notepad |
Format-Table ProcessName, @{Label="TotalRunningTime"; Expression={(Get-Date) - $_.StartTime}}
ProcessName TotalRunningTime
----------- ----------------
notepad 03:20:00.2751767
notepad 00:00:16.7710520
Get-Process
获取所有本地计算机的记事本进程并沿管道向下发送对象。 Format-Table
显示包含两列的表:ProcessName(Get-Process
属性)和 TotalRunningTime(计算属性)。
TotalRunningTime 属性由具有两个键(Label 和 Expression)的哈希表指定。 Label 键指定属性名称。 Expression 键指定计算。 表达式获取每个进程对象的 StartTime 属性,并从 Get-Date
命令(用于获取当前日期和时间)的结果中减去该值。
示例 7:格式化记事本进程
此示例使用 Get-CimInstance
获取本地计算机上所有记事本进程的运行时间。 可以将 Get-CimInstance
与 ComputerName 参数配合使用,从远程计算机获取信息。
$Processes = Get-CimInstance -Class win32_process -Filter "name='notepad.exe'"
$Processes | Format-Table ProcessName, @{
Label = "Total Running Time"
Expression={(Get-Date) - $_.CreationDate}
}
ProcessName Total Running Time
----------- ------------------
notepad.exe 03:39:39.6260693
notepad.exe 00:19:56.1376922
Get-CimInstance
获取 WMI Win32_Process 类的实例,该类描述名为 notepad.exe 的所有本地计算机进程。 进程对象存储在 $Processes
变量中。
$Processes
变量中的进程对象沿管道向下发送到 Format-Table
,该变量显示 ProcessName 属性和新的计算属性 Total Running Time。
该命令将新计算属性的名称 Total Running Time 赋予 Label 键。 Expression 键的脚本块通过从当前日期减去进程创建日期来计算进程运行的时间。 Get-Date
cmdlet 获取当前日期。 从当前日期中减去创建日期。 结果是 Total Running Time 的值。
示例 8:排查格式错误
下面的示例显示了使用表达式添加 DisplayError 或 ShowError 参数所产生的结果。
Get-Date | Format-Table DayOfWeek,{ $_ / $null } -DisplayError
DayOfWeek $_ / $null
--------- ------------
Wednesday #ERR
Get-Date | Format-Table DayOfWeek,{ $_ / $null } -ShowError
DayOfWeek $_ / $null
--------- ------------
Wednesday
InvalidArgument: Failed to evaluate expression " $_ / $null ".
参数
-AutoSize
指示 cmdlet 根据数据的宽度调整列大小和列数。 默认情况下,列大小和数量由视图确定。
类型: | SwitchParameter |
Position: | Named |
默认值: | False |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-DisplayError
指示 cmdlet 在命令行上显示错误。 在 Format-Table
命令中设置表达式的格式并需要对表达式进行故障排除时,此参数可用作调试帮助。
类型: | SwitchParameter |
Position: | Named |
默认值: | False |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Expand
指定集合对象和集合中对象的格式。 此参数旨在用于设置支持 ICollection (System.Collections) 接口的对象的格式。 默认值为 EnumOnly。 此参数的可接受值如下所示:
- EnumOnly:显示集合中的对象的属性。
- CoreOnly:显示集合对象的属性。
- Both:显示集合对象的属性以及集合中的对象的属性。
类型: | String |
接受的值: | CoreOnly, EnumOnly, Both |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Force
表示 cmdlet 指示该 cmdlet 显示所有错误信息。 与 DisplayError 或 ShowError 参数一起使用。 默认情况下,当将错误对象写入到错误或显示流时,仅显示部分错误信息。
设置某些 .NET 类型的格式时也是必需的。 有关详细信息,请参阅说明部分。
类型: | SwitchParameter |
Position: | Named |
默认值: | False |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-GroupBy
根据属性值在单独的表中指定已排序的输出。 例如,可以基于服务的状态,使用 GroupBy 将服务在单独的表中列出。
输入表达式或属性。 GroupBy 参数预期对象已进行排序。
使用 Format-Table
分组对象之前,请使用 Sort-Object
cmdlet。
GroupBy 参数的值可以是新计算属性。 计算属性可以是脚本块或哈希表。 有效的键值对包括:
- Name(或 Label)-
<string>
- Expression -
<string>
或<script block>
- FormatString -
<string>
有关详细信息,请参阅 about_Calculated_Properties。
类型: | Object |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-HideTableHeaders
省略表中的列标题。
类型: | SwitchParameter |
Position: | Named |
默认值: | False |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-InputObject
指定要设置格式的对象。 输入一个包含对象的变量,或键入可获取对象的命令或表达式。
类型: | PSObject |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | True |
接受通配符: | False |
-Property
指定要在屏幕上显示的对象属性及其显示顺序。 键入一个或多个属性名称(以逗号分隔),或使用哈希表显示计算属性。 允许使用通配符。
如果省略此参数,则屏幕上显示的属性取决于第一个对象的属性。 例如,如果第一个对象具有 PropertyA 和 PropertyB,但后续对象具有 PropertyA、PropertyB 和 PropertyC,则仅显示 PropertyA 和 PropertyB 标头。
Property 参数是可选的。 不能在同一命令中使用 Property 和 View 参数。
Property 参数的值可以是新的计算属性。 计算属性可以是脚本块或哈希表。 有效的键值对包括:
- Name(或 Label)
<string>
- Expression -
<string>
或<script block>
- FormatString -
<string>
- Width -
<int32>
- 必须大于0
- Alignment - 值可以是
Left
、Center
或Right
有关详细信息,请参阅 about_Calculated_Properties。
类型: | Object[] |
Position: | 0 |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | True |
-RepeatHeader
每个屏幕已满后重复显示表格的标头。 当输出通过管道将输出传递给寻呼机(如使用屏幕阅读器的 less
或 more
或寻呼)时,重复的标头非常有用。
类型: | SwitchParameter |
Position: | Named |
默认值: | False |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-ShowError
此参数通过管道发送错误。 在 Format-Table
命令中设置表达式的格式并需要对表达式进行故障排除时,此参数可用作调试帮助。
类型: | SwitchParameter |
Position: | Named |
默认值: | False |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-View
从 PowerShell 6 开始,默认视图在 PowerShell C#
源代码中定义。 PowerShell 5.1 及更低版本中的 *.format.ps1xml
文件在 PowerShell 6 及更高版本中不存在。
View 参数可用于指定表的备用格式或自定义视图。 可以使用默认 PowerShell 视图或创建自定义视图。 有关如何创建自定义视图的详细信息,请参阅 about_Format.ps1xml。
View 参数的备用视图和自定义视图必须使用表格式,否则 Format-Table
会失败。 如果备用视图是列表,请使用 Format-List
cmdlet。 如果备用视图不是列表或表,请使用 Format-Custom
cmdlet。
不能在同一命令中使用 Property 和 View 参数。
类型: | String |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Wrap
在下一行显示超过列宽的文本。 默认情况下,超过列宽的文本将被截断。
类型: | SwitchParameter |
Position: | Named |
默认值: | False |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
输入
你可以通过管道将任何对象传递给此 cmdlet。
输出
Microsoft.PowerShell.Commands.Internal.Format
此 cmdlet 返回表示表格的格式对象。
备注
PowerShell 包含以下 Format-Table
别名:
- 所有平台:
ft
PowerShell 7.2 引入了用于着色输出的新功能。 可以使用 $PSStyle
自动变量来管理颜色。 $PSStyle.Formatting.TableHeader
属性定义用于由 Format-Table
显示的表标题的颜色。 有关此设置的详细信息,请参阅 about_ANSI_Terminals。
如果要将 Format-Table
与 Property 参数一起使用,则需要在以下任一条件下包括 Force 参数:
输入对象通常使用
ToString()
方法格式化带外格式。 这适用于[string]
和 .NET 基元类型,这些类型是内置数值类型的超集,例如[int]
、[long]
等。输入对象没有公共属性。
输入对象是 PowerShell 用于 Success 输出流以外的输出流的包装器类型的实例。 这仅在这些包装器类型发送到需要先通过常见参数(如 ErrorVariable )或使用重定向(如
*>&1
)捕获它们的 Success 输出流时才适用。