about_Format.ps1xml

应用到: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

主题

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 显示某个对象时,它使用结构化格式设置文件中的数据来确定该对象的默认显示。格式设置文件中的数据可确定是在表中还是在列表中呈现对象,并确定默认情况下显示哪些属性。

格式设置仅影响显示。它不会影响通过管道向下传递的对象属性或它们的传递方式。Format.ps1xml 文件不能用于自定义哈希表的输出格式。

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 文件中的视图来确定如何以列表形式显示文件和文件夹对象。

当格式设置文件包含对象的多个视图时, Windows PowerShell 将应用所找到的第一个视图。

在 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 仅影响当前会话。若要使所做的更改适用于所有将来的会话,请将 Update-FormatData 命令添加到你的 Windows PowerShell 配置文件。

示例:将日历数据添加到区域性对象

此示例演示如何更改由 Get-Culture cmdlet 生成的区域性对象 (System.Globalization.CultureInfo) 的格式设置。该示例中的命令将日历属性添加到区域性对象的默认表视图显示。

第一步是查找包含区域性对象的当前视图的 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> 标记可标识视图的名称。

<ViewSelectedBy>

<ViewSelectedBy> 标记可指定该视图所应用到的一个或多个对象类型。

<GroupBy>

<GroupBy> 标记可指定视图中的项合并到组中的方式。

<TableControl>

<ListControl>

<WideControl>

<CustomControl>

这些标记包含指定每个项将如何显示的 <DefaultDisplayProperty> 标记。

<ViewSelectedBy> 标记针对该视图所应用到的每个对象类型包含 <TypeName> 标记。或者,它可以包含引用选择集的 <SelectionSetName> 标记,该选择集通过使用 <SelectionSet> 标记在其他位置定义。

<GroupBy> 标记包含可指定项的分组所依据的对象属性的 <PropertyName> 标记。它还包含 <Label> 标记(可指定要用作每个组的标签的字符串)或 <CustomControlName> 标记(可引用使用 <Control> 标记在其他位置定义的自定义控件)。<Control> 标记包含 <Name> 标记和 <CustomControl> 标记。

<TableControl> 标记通常包含 <TableHeaders> 和 <TableRowEntries> 标记,可用于定义表头和表行的格式设置。<TableHeaders> 标记通常包含具有 <Label>、<Width> 和 <Alignment> 标记的 <TableColumnHeader> 标记。<TableRowEntries> 标记包含用于表中的每一行的 <TableRowEntry> 标记。<TableRowEntry> 标记包含具有用于行中每一列的 <TableColumnItem> 标记的 <TableColumnItems> 标记。通常情况下, <TableColumnItem> 标记包含 <PropertyName> 标记(可标识要在所定义的位置显示的对象属性)或 <ScriptBlock> 标记(可包含用于计算要在该位置中显示的结果的脚本代码)。

注意:脚本块还可以在该位置中的其他位置使用,其中计算结果很有用。

<TableColumnItem> 标记还可以包含可指定属性或计算结果的显示方式的 <FormatString> 标记。

<ListControl> 标记通常包含 <ListEntries> 标记。<ListEntries> 标记包含 <ListItems> 标记。<ListItems> 标记包含 <ListItem> 标记吗,后者包含 <PropertyName> 标记。<PropertyName> 标记指定要显示在列表中的指定位置的对象属性。如果使用选择集定义视图选择,则 <ListControl> 标记还可以包含具有一个或多个 <TypeName> 标记的 <EntrySelectedBy> 标记。这些 <TypeName> 标记指定 <ListControl> 标记想要显示的对象类型。

<WideControl> 标记通常包含 <WideEntries> 标记。<WideEntries> 标记包含一个或多个 <WideEntry> 标记。该<WideEntry> 标记通常包含可指定要显示在视图中指定位置的属性的 <PropertyName> 标记。<PropertyName> 标记可以包含指定属性的显示方式的 <FormatString> 标记。

<CustomControl> 标记使你可以使用脚本块定义格式。<CustomControl> 标记通常包含具有多个 <CustomEntry> 标记的 <CustomEntries> 标记。每个 <CustomEntry> 标记包含 <CustomItem> 标记,后者可以包含用于指定视图中指定位置的内容和格式设置的各种标记,其中包括 <Text>、<Indentation>、<ExpressionBinding> 和 <NewLine>。

Update-FormatData

若要将你的 Format.ps1xml 文件加载到 Windows PowerShell 会话种中,请使用 Update-FormatData cmdlet。如果你想要使你的文件中的视图的优先级高于内置 Format.ps1xml 文件中的视图,请使用 Update-FormatData 的 PrependData 参数。Update-FormatData 仅影响当前会话。若要使所做的更改适用于所有将来的会话,请将 Update-FormatData 命令添加到你的 Windows PowerShell 配置文件。

Types.ps1xml 中的默认显示

在 $pshome 目录的 Types.ps1xml 文件中定义某些基本对象类型的默认显示。节点命名为 PsStandardMembers,子节点使用以下标记之一:

<DefaultDisplayProperty>

<DefaultDisplayPropertySet>

<DefaultKeyPropertySet>

有关详细信息,请键入以下命令:

  get-help about_types.ps1xml

跟踪 Format.ps1xml 文件使用

若要在加载或应用 Format.ps1xml 文件的过程中检测错误,请使用作为 Name 参数值的具有以下任何格式组件的 Trace-Command cmdlet:

  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