命令(cmdlet、函数和脚本)返回的对象显示格式通过使用格式化文件(format.ps1xml
)来定义。 其中几个文件由 PowerShell 提供,用于为 PowerShell 提供的命令返回的对象定义显示格式,例如由 Get-Process
cmdlet 返回的 System.Diagnostics.Process 对象。 但是,也可以创建自己的自定义格式文件来覆盖默认显示格式,也可以编写自定义格式文件来定义自己的命令返回的对象显示。
重要
格式设置文件不确定返回到管道的对象元素。 当对象返回到管道时,即使某些成员未显示,该对象的所有成员也可用。
PowerShell 使用这些格式文件中的数据来确定显示的内容以及显示的数据的格式。 显示的数据可以包括对象的属性或脚本的值。 如果要显示一些无法直接从对象属性获取的值,例如添加对象的两个属性的值,然后将总和显示为数据片段,则使用脚本。 通过为要显示的对象定义视图,可以设置所显示数据的格式。 可以为每个对象定义单个视图,可以为多个对象定义单个视图,也可以为同一对象定义多个视图。 可以定义的视图数没有限制。
格式化文件的常见功能
每个格式设置文件都可以定义以下组件,这些组件可以跨文件定义的所有视图共享:
默认配置设置,例如,如果数据超过列的宽度,则表行中显示的数据是否将显示在下一行。 有关这些设置的详细信息,请参阅 Wrap Element for TableRowEntry。
可由格式文件的任何视图显示的对象集。 有关这些集的详细信息(称为 选择集),请参阅 定义对象集。
格式设置文件的所有视图都可以使用的常见控件。 控件可让你对数据的显示方式进行精细控制。 有关控件的详细信息,请参阅 定义自定义控件。
设置视图格式
格式设置视图可以显示表格格式、列表格式、宽格式和自定义格式的对象。 在大多数情况下,每个格式设置定义都由一组描述视图的 XML 标记进行描述。 每个视图都包含视图的名称、使用视图的对象以及视图的元素,例如表视图的列和行信息。
表视图
列出一个或多个列中的对象或脚本块值的属性。 每个列表示对象的单个属性或脚本值。 可以定义一个表视图,该视图显示对象的所有属性、对象的属性子集或属性和脚本值的组合。 表的每一行表示返回的对象。 将对象传递给 Format-Table
cmdlet 时,创建表视图非常类似。 有关此视图的详细信息,请参阅 表视图。
列表视图
列出单个列中对象或脚本值的属性。 列表的每一行显示可选标签或属性名称,后跟属性或脚本的值。
创建列表视图与将对象管道连接到 Format-List
cmdlet 非常相似。 有关此视图的详细信息,请参阅 列表视图。
宽视图
列出一个或多个列中对象的单个属性或脚本值。 此视图没有标签或标题。 创建宽视图与管道对象与 Format-Wide
cmdlet 非常相似。 有关此视图的详细信息,请参阅 宽视图。
自定义视图
显示对象属性或脚本值的可自定义视图,这些视图不符合表视图、列表视图或宽视图的刚性结构。 可以定义独立的自定义视图,也可以定义另一个视图使用的自定义视图,例如表视图或列表视图。
创建自定义视图与管道对象与 Format-Custom
cmdlet 非常相似。 有关此视图的详细信息,请参阅 自定义视图。
视图的组件
以下 XML 示例显示了视图的基本 XML 组件。 各个 XML 元素因要创建的视图而异,但视图的基本组件都是相同的。
首先,每个视图都有一个 Name
元素,该元素指定用于引用视图的用户友好名称。 一个 ViewSelectedBy
元素,用于定义视图显示哪些 .NET 对象,以及定义视图的 控件 元素。
<ViewDefinitions>
<View>
<Name>NameOfView</Name>
<ViewSelectedBy>...</ViewSelectedBy>
<TableControl>...</TableControl>
</View>
<View>
<Name>NameOfView</Name>
<ViewSelectedBy>...</ViewSelectedBy>
<ListControl>...</ListControl>
<View>
<View>
<Name>NameOfView</Name>
<ViewSelectedBy>...</ViewSelectedBy>
<WideControl>...</WideControl>
<View>
<View>
<Name>NameOfView</Name>
<ViewSelectedBy>...</ViewSelectedBy>
<CustomControl>...</CustomControl>
</View>
</ViewDefinitions>
在控件元素中,可以定义一个或多个 项 元素。 如果使用多个定义,则必须指定哪些 .NET 对象使用每个定义。 通常,每个控件只需要一个只有一个定义条目。
<ListControl>
<ListEntries>
<ListEntry>
<EntrySelectedBy>...</EntrySelectedBy>
<ListItems>...</ListItems>
</ListEntry>
<ListEntry>
<EntrySelectedBy>...</EntrySelectedBy>
<ListItems>...</ListItems>
</ListEntry>
<ListEntry>
<EntrySelectedBy>...</EntrySelectedBy>
<ListItems>...</ListItems>
</ListEntry>
</ListEntries>
</ListControl>
在视图的每个条目元素中,指定 项 定义该视图显示的 .NET 属性或脚本的元素。
<ListItems>
<ListItem>...</ListItem>
<ListItem>...</ListItem>
<ListItem>...</ListItem>
</ListItems>
如前面的示例所示,格式设置文件可以包含多个视图,视图可以包含多个定义,每个定义可以包含多个项。
表视图示例
以下示例显示了用于定义包含两列的表视图的 XML 标记。
ViewDefinitions 元素是格式化文件中定义的所有视图的容器元素。
View 元素定义特定的表、列表、宽视图或自定义视图。 在每个 View 元素中,Name 元素指定视图的名称、ViewSelectedBy 元素定义使用该视图的对象,以及不同的控件元素(如以下示例中显示的 TableControl
元素)定义视图的类型。
<ViewDefinitions>
<View>
<Name>Name of View</Name>
<ViewSelectedBy>
<TypeName>Object to display using this view</TypeName>
<TypeName>Object to display using this view</TypeName>
</ViewSelectedBy>
<TableControl>
<TableHeaders>
<TableColumnHeader>
<Width></Width>
</TableColumnHeader>
<TableColumnHeader>
<Width></Width>
</TableColumnHeader>
</TableHeaders>
<TableRowEntries>
<TableRowEntry>
<TableColumnItems>
<TableColumnItem>
<PropertyName>Header for column 1</PropertyName>
</TableColumnItem>
<TableColumnItem>
<PropertyName>Header for column 2</PropertyName>
</TableColumnItem>
</TableColumnItems>
</TableRowEntry>
</TableRowEntries>
</TableControl>
</View>
</ViewDefinitions>