主題
    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 只會影
      響目前的工作階段。若要對所有未來的工作階段進行變更,請將 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 zh-TW System.Globalization.GregorianCalendar 中文 (台灣)


  Format.ps1xml 檔案中的 XML

      每個 Format.ps1xml 檔案的 ViewDefinitions 區段都包含用於定義每個檢視的 <View> 標
      記。<View> 標記通常包含下列標記:

    
          <Name>
              <Name> 標記,用於識別檢視的名稱。


          <ViewSelectedBy>
              <ViewSelectedBy> 標記,用於指定要對哪些物件類型
              套用檢視。

    
          <GroupBy>
              <GroupBy> 標記,用於指定如何將檢視中的項目 
              組合成群組。


          <TableControl>
          <ListControl>
          <WideControl>
          <ComplexControl>
              這些標記包含用來指定每個項目顯示方式的標記。

    
      <ViewSelectedBy> 標記可能包含 <TypeName> 標記以用於檢視所套用到的每個物件類
      型, 或是包含會參考使用 <SelectionSet> 標記在別處所定義之選項組的 
      <SelectionSetName> 標記。


      <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 只會影響目前的工作階段。若要對所有未來的工作階段
      進行變更,請將 Update-FormatData 命令新增至 Windows PowerShell 設定檔。


  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




目錄