Sdílet prostřednictvím


about_Format.ps1xml

Krátký popis

Soubory Format.ps1xml v PowerShellu definují výchozí zobrazení objektů v konzole PowerShellu. Můžete vytvořit vlastní Format.ps1xml soubory a změnit zobrazení objektů nebo definovat výchozí zobrazení pro nové typy objektů, které vytvoříte v PowerShellu.

Dlouhý popis

Soubory Format.ps1xml v PowerShellu definují výchozí zobrazení objektů v PowerShellu. Můžete vytvořit vlastní Format.ps1xml soubory a změnit zobrazení objektů nebo definovat výchozí zobrazení pro nové typy objektů, které vytvoříte v PowerShellu.

Když PowerShell zobrazí objekt, použije data v souborech strukturovaného formátování k určení výchozího zobrazení objektu. Data v souborech formátování určují, zda se objekt vykresluje v tabulce nebo v seznamu, a určuje, které vlastnosti se ve výchozím nastavení zobrazují.

Formátování ovlivní jenom zobrazení. Nemá vliv na to, které vlastnosti objektu se předávají kanálu nebo jak se předávají. Format.ps1xml soubory nelze použít k přizpůsobení výstupního formátu pro tabulky hash.

PowerShell obsahuje sedm souborů formátování. Tyto soubory se nacházejí v instalačním adresáři ($PSHOME). Každý soubor definuje zobrazení skupiny objektů rozhraní Microsoft .NET Framework:

  1. Certificate.Format.ps1xml

    Objekty v úložišti certifikátů, například certifikáty X.509 a úložiště certifikátů.

  2. DotNetTypes.Format.ps1xml

    Jiné typy rozhraní .NET Framework, jako jsou CultureInfo, FileVersionInfo a EventLogEntry objekty.

  3. FileSystem.Format.ps1xml

    Objekty systému souborů, jako jsou soubory a adresáře.

  4. Help.Format.ps1xml

    Zobrazení nápovědy, jako jsou podrobná a úplná zobrazení, parametry a příklady.

  5. PowerShellCore.Format.ps1xml

    Objekty generované základními rutinami PowerShellu, například Get-Member a Get-History.

  6. PowerShellTrace.Format.ps1xml

    Trasování objektů, jako jsou objekty vygenerované rutinou Trace-Command .

  7. Registry.Format.ps1xml

    Objekty registru, jako jsou klíče a položky.

Formátovací soubor může definovat čtyři různá zobrazení každého objektu:

  • Table
  • List
  • Široká
  • Vlastní

Když je například výstup Get-ChildItem příkazu předaný do Format-List příkazu, Format-List pomocí zobrazení v FileSystem.Format.ps1xml souboru určí, jak zobrazit objekty souborů a složek jako seznam.

Pokud formátovací soubor obsahuje více než jedno zobrazení objektu, Použije PowerShell první zobrazení, které najde.

Format.ps1xml V souboru je zobrazení definováno sadou značek XML popisující název zobrazení, typ objektu, na který lze použít, záhlaví sloupců a vlastnosti, které se zobrazí v textu zobrazení. Formát v Format.ps1xml souborech se použije těsně před zobrazením dat uživateli.

Vytváření nových souborů Format.ps1xml

Soubory .ps1xml nainstalované pomocí PowerShellu jsou digitálně podepsané, aby se zabránilo manipulaci, protože formátování může obsahovat bloky skriptů. Pokud chcete změnit formát zobrazení existujícího zobrazení objektů nebo přidat zobrazení pro nové objekty, vytvořte vlastní Format.ps1xml soubory a přidejte je do relace PowerShellu.

Pokud chcete vytvořit nový soubor, zkopírujte existující Format.ps1xml soubor. Nový soubor může mít libovolný název, ale musí mít příponu .ps1xml názvu souboru. Nový soubor můžete umístit do libovolného adresáře, který je přístupný pro PowerShell, ale je užitečné umístit soubory do instalačního adresáře PowerShellu ($PSHOME) nebo do podadresáře instalačního adresáře.

Pokud chcete změnit formátování aktuálního zobrazení, vyhledejte zobrazení v souboru formátování a pak pomocí značek změňte zobrazení. Pokud chcete vytvořit zobrazení pro nový typ objektu, vytvořte nové zobrazení nebo použijte existující zobrazení jako model. Značky jsou popsány v další části. Pak můžete odstranit všechna ostatní zobrazení v souboru, aby změny byly zřejmé pro každého, kdo soubor zkoumá.

Po uložení změn pomocí Update-FormatData rutiny přidejte nový soubor do relace PowerShellu. Pokud chcete, aby zobrazení mělo přednost před zobrazením definovaným v předdefinovaných souborech, použijte parametr PrependPath . Update-FormatData ovlivňuje pouze aktuální relaci. Pokud chcete provést změnu všech budoucích relací, přidejte Update-FormatData příkaz do profilu PowerShellu.

Příklad: Přidání dat kalendáře do objektů jazykové verze

Tento příklad ukazuje, jak změnit formátování objekty jazykové verze System.Globalization.CultureInfo vygenerované rutinou Get-Culture v aktuální relaci PowerShellu. Příkazy v příkladu přidají vlastnost Kalendář do výchozího zobrazení zobrazení tabulky objekty jazykové verze.

Prvním krokem je nalezení Format.ps1xml souboru, který obsahuje aktuální zobrazení objektů jazykové verze. Následující Select-String příkaz najde soubor:

$Parms = @{
  Path = "$PSHOME\*Format.ps1xml"
  Pattern = "System.Globalization.CultureInfo"
}

Select-String @Parms
C:\Windows\System32\WindowsPowerShell\v1.0\DotNetTypes.format.ps1xml:113:
     <Name>System.Globalization.CultureInfo</Name>
C:\Windows\System32\WindowsPowerShell\v1.0\DotNetTypes.format.ps1xml:115:
<TypeName>System.Globalization.CultureInfo</TypeName>

Tento příkaz odhalí, že definice je v DotNetTypes.Format.ps1xml souboru.

Další příkaz zkopíruje obsah souboru do nového souboru. MyDotNetTypes.Format.ps1xml

Copy-Item $PSHome\DotNetTypes.format.ps1xml MyDotNetTypes.Format.ps1xml

Otevřete soubor v libovolném MyDotNetTypes.Format.ps1xml XML nebo textovém editoru, například v editoru Visual Studio Code. Vyhledejte část objektu System.Globalization.CultureInfo . Následující XML definuje zobrazení CultureInfo objektu. Objekt má pouze zobrazení 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>
    </TableHeaders>
    <TableRowEntries>
      <TableRowEntry>
        <TableColumnItems>
          <TableColumnItem>
            <PropertyName>LCID</PropertyName>
          </TableColumnItem>
          <TableColumnItem>
            <PropertyName>Name</PropertyName>
          </TableColumnItem>
          <TableColumnItem>
            <PropertyName>DisplayName</PropertyName>
          </TableColumnItem>
        </TableColumnItems>
      </TableRowEntry>
    </TableRowEntries>
  </TableControl>
</View>

Odstraňte zbytek souboru s výjimkou otevírání <?xml><Configuration>, a značek a <ViewDefinitions> značek a uzavíracích <ViewDefinitions> a <Configuration> značek. Pokud existuje digitální podpis, odstraňte ho z vlastního Format.ps1xmlsouboru.

Soubor MyDotNetTypes.Format.ps1xml by teď měl vypadat jako v následující ukázce:

<?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>

Vytvořte nový sloupec pro vlastnost Kalendář přidáním nové sady <TableColumnHeader> značek. Hodnota vlastnosti Calendar může být dlouhá, proto zadejte hodnotu 45 znaků jako <Width>hodnotu .

<TableHeaders>
  <TableColumnHeader>
    <Width>16</Width>
  </TableColumnHeader>
  <TableColumnHeader>
    <Width>16</Width>
  </TableColumnHeader>
  <TableColumnHeader>
    <Width>45</Width>
  </TableColumnHeader>
  <TableColumnHeader/>
</TableHeaders>

Přidejte novou položku sloupce pro kalendář do řádků tabulky pomocí <TableColumnItem> značek a <PropertyName značek:

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

Soubor uložte a zavřete. Slouží Update-FormatData k přidání nového formátu souboru do aktuální relace PowerShellu.

Tento příklad používá parametr PrependPath k umístění nového souboru do vyššího pořadí priorit než původní soubor. Další informace naleznete v tématu Update-FormatData.

Update-FormatData -PrependPath $PSHOME\MyDotNetTypes.Format.ps1xml

Pokud chcete změnu otestovat, zadejte Get-Culture a zkontrolujte výstup, který obsahuje vlastnost Kalendář .

Get-Culture
LCID Name  Calendar                               DisplayName
---- ----  --------                               -----------
1033 en-US System.Globalization.GregorianCalendar English (United States)

Xml v souborech Format.ps1xml

Úplnou definici schématu najdete ve formátu Format.xsd v úložišti zdrojového kódu PowerShellu na GitHubu.

Oddíl ViewDefinitions každého Format.ps1xml souboru obsahuje <View> značky, které definují každé zobrazení. Typická <View> značka zahrnuje následující značky:

  • <Name> určuje název zobrazení.
  • <ViewSelectedBy> určuje typ objektu nebo typy, na které se zobrazení vztahuje.
  • <GroupBy> určuje, jak budou položky v zobrazení sloučeny ve skupinách.
  • <TableControl>, <ListControl>, <WideControl>a <CustomControl> obsahují značky, které určují, jak budou jednotlivé položky zobrazeny.

Značka ViewSelectedBy

Značka <ViewSelectedBy> může obsahovat <TypeName> značku pro každý typ objektu, na který se zobrazení vztahuje. Nebo může obsahovat <SelectionSetName> značku, která odkazuje na sadu výběru definovanou jinde pomocí značky <SelectionSet> .

Značka GroupBy

Značka <GroupBy> obsahuje <PropertyName> značku, která určuje vlastnost objektu, podle kterých mají být položky seskupeny. Obsahuje také <Label> značku, která určuje řetězec, který se má použít jako popisek pro každou skupinu, nebo <CustomControlName> značku, která odkazuje na vlastní ovládací prvek definovaný jinde pomocí značky <Control> . Značka <Control> obsahuje <Name> značku a <CustomControl> značku.

TableControlTag

Značka <TableControl> obvykle obsahuje <TableHeaders> a <TableRowEntries> značky definující formátování hlav a řádků tabulky. Značka <TableHeaders> obvykle obsahuje <TableColumnHeader> značky, které obsahují <Label>, <Width>a <Alignment> značky. Značka <TableRowEntries> obsahuje <TableRowEntry> značky pro každý řádek v tabulce. Značka <TableRowEntry> obsahuje <TableColumnItems> značku, která obsahuje <TableColumnItem> značku pro každý sloupec v řádku. Značka obvykle obsahuje <PropertyName> značku, <TableColumnItem> která identifikuje vlastnost objektu, která se má zobrazit v definovaném umístění, nebo <ScriptBlock> značku obsahující kód skriptu, který vypočítá výsledek, který se má zobrazit v umístění.

Poznámka:

Bloky skriptu se dají použít i jinde v umístěních, kde můžou být užitečné počítané výsledky.

Značka <TableColumnItem> může také obsahovat <FormatString> značku, která určuje způsob zobrazení vlastnosti nebo počítaných výsledků.

Značka ListControl

Značka <ListControl> obvykle obsahuje <ListEntries> značku. Značka <ListEntries> obsahuje <ListEntry> značku. Značka <ListEntry> obsahuje <ListItems> značku. Značka <ListItems> obsahuje <ListItem> značky, které obsahují <PropertyName> značky. Značky <PropertyName> určují vlastnost objektu, která se má zobrazit v zadaném umístění v seznamu. Pokud je výběr zobrazení definovaný pomocí sady výběru, mohou značky <ListEntry> obsahovat <EntrySelectedBy> také značku, <ListControl> která obsahuje jednu nebo více <TypeName> značek. Tyto <TypeName> značky určují typ objektu <ListControl> , který má značka zobrazit.

Značka WideControl

Značka <WideControl> obvykle obsahuje <WideEntries> značku. Značka <WideEntries> obsahuje jednu nebo více <WideEntry> značek. Značka <WideEntry> obsahuje jednu <WideItem> značku.

Značka <WideItem> musí obsahovat <PropertyName> značku nebo <ScriptBlock> značku. Značka <PropertyName> určuje vlastnost, která se má zobrazit v zadaném umístění v zobrazení. Značka <ScriptBlock> určuje skript, který se má vyhodnotit a zobrazit v zadaném umístění v zobrazení.

Značka <WideItem> může obsahovat <FormatString> značku, která určuje, jak se má vlastnost zobrazit.

Značka CustomControl

Značka <CustomControl> umožňuje definovat formát pomocí bloku skriptu. Značka <CustomControl> obvykle obsahuje <CustomEntries> značku, která obsahuje více <CustomEntry> značek. Každá <CustomEntry> značka obsahuje <CustomItem> značku, která může obsahovat různé značky, které určují obsah a formátování zadaného umístění v zobrazení, včetně <Text>, , <Indentation><ExpressionBinding>a <NewLine> značek.

Výchozí zobrazení v types.ps1xml

Výchozí zobrazení některých základních typů objektů jsou definovány v Types.ps1xml souboru v $PSHOME adresáři. Uzly mají název PsStandardMembers a pod uzly používají jednu z následujících značek:

  • <DefaultDisplayProperty>
  • <DefaultDisplayPropertySet>
  • <DefaultKeyPropertySet>

Další informace najdete v tématu about_Types.ps1xml.

Použití souboru Tracing Format.ps1xml

Pokud chcete zjistit chyby při načítání nebo aplikaci Format.ps1xml souborů, použijte rutinu Trace-Command s některou z následujících komponent formátu jako hodnotu parametru Name :

  • FormatFileLoading
  • FormatViewBinding

Další informace naleznete v tématu Trace-Command a Get-TraceSource.

Podepsání souboru Format.ps1xml

Pokud chcete chránit uživatele souboru Format.ps1xml , podepište ho pomocí digitálního podpisu. Další informace najdete v tématu about_Signing.

Ukázkový XML pro vlastní zobrazení formátovací tabulky

Následující ukázka vytvoří Format-Table vlastní zobrazení pro objekty System.IO.DirectoryInfo a System.IO.FileInfo vytvořené objekty Get-ChildItem. Vlastní zobrazení má název mygciview a přidá do tabulky sloupec CreationTime .

Vlastní zobrazení se vytvoří z upravené verze souboru uloženého FileSystem.Format.ps1xml v $PSHOME PowerShellu 5.1.

Po uložení vlastního .ps1xml souboru použijte Update-FormatData zobrazení do relace PowerShellu. V tomto příkladu musí vlastní zobrazení použít formát tabulky, Format-Table jinak selže.

Pomocí Format-Table parametru View můžete zadat název vlastního zobrazení a formátovat výstup tabulky. Příklad spuštění příkazu najdete v tématu Format-Table.

$Parms = @{
  Path = "$PSHOME\*Format.ps1xml"
  Pattern = "System.IO.DirectoryInfo"
}
Select-String @Parms
Copy-Item $PSHome\FileSystem.format.ps1xml .\MyFileSystem.Format.ps1xml
Update-FormatData -PrependPath $PSHOME\Format\MyFileSystem.Format.ps1xml

Poznámka:

Pro přizpůsobení vzorku XML v rámci omezení šířky řádku bylo nutné zkomprimovat určité odsazení a použít konce řádků v kódu.

<?xml version="1.0" encoding="utf-8" ?>
<Configuration>
    <SelectionSets>
        <SelectionSet>
            <Name>FileSystemTypes</Name>
            <Types>
                <TypeName>System.IO.DirectoryInfo</TypeName>
                <TypeName>System.IO.FileInfo</TypeName>
            </Types>
        </SelectionSet>
    </SelectionSets>
<Controls>
<Control>
<Name>FileSystemTypes-GroupingFormat</Name>
<CustomControl>
 <CustomEntries>
  <CustomEntry>
    <CustomItem>
    <Frame>
    <LeftIndent>4</LeftIndent>
    <CustomItem>
    <Text AssemblyName="System.Management.Automation"
    BaseName="FileSystemProviderStrings"
    ResourceId="DirectoryDisplayGrouping"/>
    <ExpressionBinding>
     <ScriptBlock>
      $_.PSParentPath.Replace("Microsoft.PowerShell.Core\FileSystem::", "")
     </ScriptBlock>
    </ExpressionBinding>
    <NewLine/>
    </CustomItem>
    </Frame>
    </CustomItem>
    </CustomEntry>
 </CustomEntries>
</CustomControl>
</Control>
</Controls>
<ViewDefinitions>
    <View>
    <Name>mygciview</Name>
    <ViewSelectedBy>
        <SelectionSetName>FileSystemTypes</SelectionSetName>
    </ViewSelectedBy>
    <GroupBy>
      <PropertyName>PSParentPath</PropertyName>
      <CustomControlName>FileSystemTypes-GroupingFormat</CustomControlName>
    </GroupBy>
        <TableControl>
            <TableHeaders>
                <TableColumnHeader>
                    <Label>Mode</Label>
                    <Width>7</Width>
                    <Alignment>left</Alignment>
                </TableColumnHeader>
                <TableColumnHeader>
                    <Label>LastWriteTime</Label>
                    <Width>25</Width>
                    <Alignment>right</Alignment>
                </TableColumnHeader>
                <TableColumnHeader>
                    <Label>CreationTime</Label>
                    <Width>25</Width>
                    <Alignment>right</Alignment>
                </TableColumnHeader>
                <TableColumnHeader>
                    <Label>Length</Label>
                    <Width>14</Width>
                    <Alignment>right</Alignment>
                </TableColumnHeader>
                <TableColumnHeader/>
            </TableHeaders>
            <TableRowEntries>
                <TableRowEntry>
                    <Wrap/>
                    <TableColumnItems>
                        <TableColumnItem>
                            <PropertyName>Mode</PropertyName>
                        </TableColumnItem>
                        <TableColumnItem>
                            <ScriptBlock>
                                [String]::Format("{0,10}  {1,8}",
                                    $_.LastWriteTime.ToString("d"),
                                    $_.LastWriteTime.ToString("t"))
                            </ScriptBlock>
                        </TableColumnItem>
                        <TableColumnItem>
                            <ScriptBlock>
                                [String]::Format("{0,10}  {1,8}",
                                    $_.CreationTime.ToString("d"),
                                    $_.LastWriteTime.ToString("t"))
                            </ScriptBlock>
                        </TableColumnItem>
                        <TableColumnItem>
                        <PropertyName>Length</PropertyName>
                        </TableColumnItem>
                        <TableColumnItem>
                            <PropertyName>Name</PropertyName>
                        </TableColumnItem>
                    </TableColumnItems>
                </TableRowEntry>
            </TableRowEntries>
        </TableControl>
    </View>
  </ViewDefinitions>
</Configuration>

Viz také