主题 about_Format.ps1xml 简短说明 Windows PowerShell 中的 Format.ps1xml 文件用于定义 Windows PowerShell 控制台中对象的默认显示。您可以创建自己的 Format.ps1xml 文件,以更改对象的显示或者为在 Windows PowerShell 中创建的新对象类型定义默认显示。 详细说明 Windows PowerShell 中的 Format.ps1xml 文件用于定义 Windows PowerShell 中对象的默认显示。您可以创建自己的 Format.ps1xml 文件,以更改对象的显示或者为在 Windows PowerShell 中创建的新对象类型定义默认显示。 当 Windows PowerShell 显示对象时,它将使用结构化格式设置文件中的数据来确定对象的默认显示。格式设 置文件中的数据确定是在表还是在列表中呈现对象,还确定默认情况下显示哪些属性。 格式设置仅影响显示,不影响传入管道的对象属性以及这些属性的传递方式。 Windows PowerShell 提供七个格式设置文件。这些文件位于安装目录 ($pshome) 中。每个文件定义一组 Microsoft .NET Framework 对象的显示: Certificate.Format.ps1xml 证书存储区中的对象(如 X.509 证书)和证书存储区。 DotNetTypes.Format.ps1xml 其他 .NET Framework 类型,如 CultureInfo、FileVersionInfo 和 EventLogEntry 对象。 FileSystem.Format.ps1xml 文件系统对象,如文件和目录。 Help.Format.ps1xml 帮助视图(如详细和完整视图)、参数和示例。 PowerShellCore.format.ps1xml 由 Windows PowerShell 核心 cmdlet(如 Get-Member 和 Get-History)生成的对象。 PowerShellTrace.format.ps1xml 跟踪对象,如由 Trace-Command cmdlet 生成的对象。 Registry.format.ps1xml 注册表对象,如注册表项和注册表条目。 格式设置文件可以为每个对象定义四种不同的视图:表视图、列表视图、宽视图和复杂视图。例如, 在将 Get-ChildItem 命令的输出通过管道传入 Format-List 命令时,Format-List 将使用 FileSystem.format.ps1xml 文件中的视图确定如何将文件和文件夹对象显示为列表。 在 Format.ps1xml 文件中,视图由一组 XML 标记定义,这些标记描述了该视图的名称、该视图可应用于的对 象类型、列标题以及在该视图主体中显示的属性。Format.ps1xml 文件中的格式在即将向用户呈现数据时应用。 创建新的 Format.ps1xml 文件 与 Windows PowerShell 一起安装的 .ps1xml 文件经过了数字签名以防篡改(因为格式设置中可能包含脚 本块)。因此,若要更改现有对象视图的显示格式或为新对象添加视图,请创建您自己的 Format.ps1xml 文 件,然后将这些文件添加到 Windows PowerShell 会话中。 若要创建新文件,请复制现有的 Format.ps1xml 文件。新文件可以使用任何名称,但其文件扩展名必须 为 .ps1xml。您可以将新文件放在 Windows PowerShell 可访问的任何目录中,但最好将这些文件放在 Windows PowerShell 安装目录 ($pshome) 或该安装目录的子目录中。 若要更改当前视图的格式设置,请在格式设置文件中找到该视图,然后使用标记更改该视图。 若要为新对象类型创建视图,请创建一个新视图,或者将现有视图用作模型。(标记将在本主题的 下一节中进行说明。)然后,可以删除该文件中的所有其他视图,以便检查该文件的任何人都可以明显看到这些更改。 保存这些更改之后,使用 Update-FormatData cmdlet 将新文件添加到 Windows PowerShell 会话 中。如果希望您的视图优先于内置文件中定义的视图,请使用 Update-FormatData 的 PrependData 参 数。Update-FormatData 仅影响当前会话。要使更改应用于以后所有的会话,请在 Windows PowerShell 配置文件中添加 Update-FormatData 命令。 示例:向区域性对象中添加日历数据 此示例说明如何更改由 Get-Culture cmdlet 生成的区域性对象 (System.Globalization.CultureInfo) 的格式设置。 示例中的命令将 Calendar 属性添加到区域性对象的默认表视图中。 第一步是查找包含区域性对象的当前视图的 Format.ps1xml 文件。以下 Select-String 命令用于查找该 文件: select-string -path $pshome\*format.ps1xml ` -pattern System.Globalization.CultureInfo 此命令显示相应的定义位于 DotNetTypes.Format.ps1xml 文件中。 下一个命令将该文件的内容复制到一个新文件 MyDotNetTypes.Format.ps1xml 中。 copy-item DotNetTypes.Format.ps1xml MyDotNetTypes.Format.ps1xml 然后,使用任何 XML 或文本编辑器(如记事本)打开 MyDotNetTypes.Format.ps1xml 文件。找到 System.Globalization.CultureInfo 对象节。以下 XML 定义 CultureInfo 对象的视图。 该对象只有一个 TableControl 视图。 <View> <Name>System.Globalization.CultureInfo</Name> <ViewSelectedBy> <TypeName>Deserialized.System.Globalization.CultureInfo</TypeName> <TypeName>System.Globalization.CultureInfo</TypeName> </ViewSelectedBy> <TableControl> <TableHeaders> <TableColumnHeader> <Width>16</Width> </TableColumnHeader> <TableColumnHeader> <Width>16</Width> </TableColumnHeader> <TableColumnHeader/> </TableHeaders> <TableRowEntries> <TableRowEntry> <TableColumnItems> <TableColumnItem> <PropertyName>LCID</PropertyName> </TableColumnItem> <TableColumnItem> <PropertyName>Name</PropertyName> </TableColumnItem> <TableColumnItem> <PropertyName>DisplayName</PropertyName> </TableColumnItem> </TableColumnItems> </TableRowEntry> </TableRowEntries> </TableControl> </View> 删除该文件的其余部分,但不要删除 <?XML>、<Configuration> 和 <ViewDefinitions> 起始标记以及 <ViewDefintions> 和 <Configuration> 结束标记。此外,每次更改该文件时还必须删除 数字签名。 <?xml version="1.0" encoding="utf-8" ?> <Configuration> <ViewDefinitions> <View> <Name>System.Globalization.CultureInfo</Name> <ViewSelectedBy> <TypeName>Deserialized.System.Globalization.CultureInfo</TypeName> <TypeName>System.Globalization.CultureInfo</TypeName> </ViewSelectedBy> <TableControl> <TableHeaders> <TableColumnHeader> <Width>16</Width> </TableColumnHeader> <TableColumnHeader> <Width>16</Width> </TableColumnHeader> <TableColumnHeader/> </TableHeaders> <TableRowEntries> <TableRowEntry> <TableColumnItems> <TableColumnItem> <PropertyName>LCID</PropertyName> </TableColumnItem> <TableColumnItem> <PropertyName>Name</PropertyName> </TableColumnItem> <TableColumnItem> <PropertyName>DisplayName</PropertyName> </TableColumnItem> </TableColumnItems> </TableRowEntry> </TableRowEntries> </TableControl> </View> </ViewDefinitions> </Configuration> 接着,通过添加一组新的 <TableColumnHeader> 标记,为 Calendar 属性创建一个新列。Calendar 属 性的值可能很长,因此将使用包含 45 个字符的值,如下所示: <TableControl> <TableHeaders> <TableColumnHeader> <Width>16</Width> </TableColumnHeader> <TableColumnHeader> <Width>16</Width> </TableColumnHeader> <TableColumnHeader> <Width>45</Width> </TableColumnHeader> <TableColumnHeader/> </TableHeaders> 现在,在表行中添加一个新列项,如下所示: <TableRowEntries> <TableRowEntry> <TableColumnItems> <TableColumnItem> <PropertyName>LCID</PropertyName> </TableColumnItem> <TableColumnItem> <PropertyName>Name</PropertyName> </TableColumnItem> <TableColumnItem> <PropertyName>Calendar</PropertyName> </TableColumnItem> <TableColumnItem> <PropertyName>DisplayName</PropertyName> </TableColumnItem> </TableColumnItems> </TableRowEntry> </TableRowEntries> 在保存并关闭该文件后,使用 Update-FormatData 命令(如下面的命令)将新格式文件添加到当前会话中。 该命令使用 PrependData 参数以高于原始文件的优先级顺序放入新文件。(有关 Update-FormatData 的 详细信息,请键入"get-help update-formatdata"。) update-formatdata -prependpath $pshome\MyDotNetTypes.format.ps1xml 若要测试这一更改,请键入"get-culture",然后查看输出(输出中包含 Calendar 属性)。 C:\PS> get-culture LCID Name Calendar DisplayName ---- ---- -------- ----------- 1033 en-US System.Globalization.GregorianCalendar English (United States) Format.ps1xml 文件中的 XML 每个 Format.ps1xml 文件的 ViewDefinitions 节都包含定义每一种视图的 <View> 标记。典型的 <View> 标记包括以下标记: <Name> <Name> 标记用于标识视图的名称。 <ViewSelectedBy> <ViewSelectedBy> 标记用于指定应用该视图的 对象类型。 <GroupBy> <GroupBy> 标记用于指定视图中的项 的分组方式。 <TableControl> <ListControl> <WideControl> <ComplexControl> 这些标记包含指定各项的显示方式的标记。 <ViewSelectedBy> 标记可为要应用该视图的每个对象类型包含一个 <TypeName> 标记。或者,它也可包含 一个 <SelectionSetName> 标记,引用在别处使用 <SelectionSet> 标记定义的选择集。 <GroupBy> 标记包含 <PropertyName> 标记,后者指定按哪个对象属性对项进行分组。它还包含 <Label> 标记或 <ComplexControlName> 标记,前者为每个组指定用作标签的字符串,后者引用使用 <Control> 标记在别处定义的复杂控件。<Control> 标记包含一个 <Name> 标记和一个 <ComplexControl> 标记。 <TableControl> 标记通常包含 <TableHeaders> 和 <TableRowEntries> 标记,这两个标记将定义表 头和表行的格式设置。<TableHeaders> 标记通常包含 <TableColumnHeader> 标记,后者又包含 <Label>、<Width> 和 <Alignment> 标记。<TableRowEntries> 标记包含用于表中每一行的 <TableRowEntry> 标记。<TableRowEntry> 标记又包含 <TableColumnItems> 标记,后者包含用于行 中每一列的 <TableColumnItem> 标记。 <TableColumnItem> 标记通常包含 <PropertyName> 标记或 <ScriptBlock> 标记,前者标识要在定义 的位置显示的对象属性,后者包含用于计算将在该位置显示的结果的脚本代码。 注意:脚本块还可以用于需要显示计算结果的其他位置。 <TableColumnItem> 还可以包含 <FormatString> 标记,后者将指定属性或计算结果的显示方式。 <ListControl> 标记通常包含 <ListEntries> 标记。<ListEntries> 标记又包含 <ListItems> 标记。<ListItems> 标记包含 <ListItem> 标记,后者又包含 <PropertyName> 标记。<PropertyName> 标记指定要在列表中的指定位置显示的对象属性。如果通过选择 集定义了视图选择,则 <ListControl> 标记还可以包含 <EntrySelectedBy> 标记,后者包含一个或多个 <TypeName> 标记。这些 <TypeName> 标记指定 <ListControl> 标记要显示的对象类型。 <WideControl> 标记通常包含 <WideEntries> 标记。<WideEntries> 标记又包含一个或多个 <WideEntry> 标记。<WideEntry> 标记通常包含 <PropertyName> 标记,后者用于指定要在视图的指定 位置显示的属性。<PropertyName> 标记可以包含 <FormatString> 标记,后者指定属性的显示方式。 <ComplexControl> 标记包含比其他视图类型更复杂的标记组合。<ComplexControl> 标记通常包含 <ComplexEntries> 标记。<ComplexEntries> 标记包含多个 <ComplexEntry> 标记。 <ComplexEntry> 标记通常包含 <ComplexItem> 标记。此标记又可以包含针对视图中的指定位置 指定内容和格式设置的各种标记,其中包括 <Text>、<Indentation>、<ExpressionBinding> 和 <NewLine> 标记。 Update-FormatData 若要将 Format.ps1xml 文件加载到 Windows PowerShell 会话,请使用 Update-FormatData cmdlet。如果希望您文件中的视图优先于内置文件 Format.ps1xml 中的视图,请使用 Update- FormatData 的 PrependData 参数。Update-FormatData 仅影响当前会话。要使更改应用于以后所有的 会话,请在 Windows PowerShell 配置文件中添加 Update-FormatData 命令。 Types.ps1xml 中的默认显示 $pshome 目录下的 Types.ps1xml 文件定义了一些基本对象类型的默认显示。这些节点名为 PsStandardMembers,其子节点使用以下任一标记: <DefaultDisplayProperty> <DefaultDisplayPropertySet> <DefaultKeyPropertySet> 有关详细信息,请键入以下命令: get-help about_types.ps1xml 跟踪 Format.ps1xml 文件使用情况 若要在加载或应用 Format.ps1xml 文件时检测错误,请使用 Trace-Command cmdlet 并将以下任意格式 组件用作 Name 参数的值: FormatFileLoading UpdateFormatData FormatViewBinding 有关详细信息,请键入以下命令: get-help trace-command get-help get-tracesource 对 Format.ps1xml 文件进行签名 若要对您的 Format.ps1xml 文件的用户提供保护,请使用数字签名对该文件进行签名。有关详细信息,请键入: get-help about_signing 另请参阅 Update-FormatData Trace-Command Get-TraceSource