主题
    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




目录