about_Format.ps1xml

Krátký popis

Počínaje PowerShellem 6 se výchozí zobrazení objektů definují ve zdrojovém kódu 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

Počínaje PowerShellem 6 se výchozí zobrazení definují ve zdrojovém kódu PowerShellu. Soubory Format.ps1xml z PowerShellu 5.1 a starších verzí v PowerShellu 6 a novějších verzích neexistují.

Zdrojový kód PowerShellu definuje 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.

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.

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

  • Table
  • List
  • Široká
  • Vlastní

Pokud je například výstup Get-ChildItem příkazu předaný do Format-List příkazu, Format-List pomocí zobrazení seznamu definovaného ve zdrojovém kódu 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.

Ve vlastním Format.ps1xml souboru je zobrazení definováno sadou značek XML popisující název zobrazení, typ objektu, na který se dá použít, záhlaví sloupců a vlastnosti, které se zobrazí v těle 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

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 Format.ps1xml soubor pro definování vlastního zobrazení, použijte rutiny Get-FormatData a Export-FormatData . K úpravě souboru použijte textový editor. Soubor lze uložit do libovolného adresáře, ke kterému má PowerShell přístup, například do podadresáře $HOME.

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 přidejte nový soubor do relace PowerShellu pomocí rutiny Update-FormatData . 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.

Začněte tím, že získáte data formátu ze souboru zdrojového kódu a vytvoříte Format.ps1xml soubor, který obsahuje aktuální zobrazení objektů jazykové verze.

Get-FormatData -TypeName System.Globalization.CultureInfo |
  Export-FormatData -Path $HOME\Format\CultureInfo.Format.ps1xml

Otevřete soubor v libovolném CultureInfo.Format.ps1xml XML nebo textovém editoru, například v editoru Visual Studio Code. Následující XML definuje zobrazení CultureInfo objektu.

Soubor CultureInfo.Format.ps1xml by 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>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 $HOME\Format\CultureInfo.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.

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

Pokud chcete vytvořit vlastní zobrazení, vygenerujte .ps1xml soubor pomocí Get-FormatData rutin a Export-FormatData rutin. Potom upravte .ps1xml soubor a vytvořte kód pro vlastní zobrazení. Soubor .ps1xml lze uložit v libovolném adresáři, ke kterému má PowerShell přístup. Například podadresář .$HOME

.ps1xml Po vytvoření souboru použijte Update-FormatData rutinu k zahrnutí zobrazení do aktuální relace PowerShellu. Pokud potřebujete zobrazení dostupné ve všech relacích PowerShellu, přidejte do profilu PowerShellu příkaz update.

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í, mygciview a naformátovat výstup tabulky pomocí sloupce CreationTime . Příklad spuštění příkazu najdete v tématu Format-Table.

Poznámka:

I když můžete získat formátování XML ze zdrojového kódu pro vytvoření vlastního zobrazení, může být k získání požadovaného výsledku potřeba další vývoj.

V následujícím Get-FormatData příkazu je k dispozici alternativní parametr PowerShellVersion , který zajistí, že se vrátí všechny informace o místním formátování. Používejte -PowerShellVersion $PSVersionTable.PSVersion místo konkrétní verze PowerShellu.

Get-FormatData -PowerShellVersion 5.1 -TypeName System.IO.DirectoryInfo |
   Export-FormatData -Path ./Mygciview.Format.ps1xml
Update-FormatData -AppendPath ./Mygciview.Format.ps1xml
<?xml version="1.0" encoding="utf-8"?>
<Configuration>
  <ViewDefinitions>
    <View>
      <Name>mygciview</Name>
      <ViewSelectedBy>
        <TypeName>System.IO.DirectoryInfo</TypeName>
        <TypeName>System.IO.FileInfo</TypeName>
      </ViewSelectedBy>
      <GroupBy>
        <PropertyName>PSParentPath</PropertyName>
      </GroupBy>
      <TableControl>
        <TableHeaders>
          <TableColumnHeader>
            <Label>Mode</Label>
            <Width>7</Width>
            <Alignment>Left</Alignment>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>LastWriteTime</Label>
            <Width>26</Width>
            <Alignment>Right</Alignment>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>CreationTime</Label>
            <Width>26</Width>
            <Alignment>Right</Alignment>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>Length</Label>
            <Width>14</Width>
            <Alignment>Right</Alignment>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>Name</Label>
            <Alignment>Left</Alignment>
          </TableColumnHeader>
        </TableHeaders>
        <TableRowEntries>
          <TableRowEntry>
            <Wrap />
            <TableColumnItems>
              <TableColumnItem>
                <PropertyName>ModeWithoutHardLink</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>LastWriteTime</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>CreationTime</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>Length</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>Name</PropertyName>
              </TableColumnItem>
            </TableColumnItems>
          </TableRowEntry>
        </TableRowEntries>
      </TableControl>
    </View>
  </ViewDefinitions>
</Configuration>

Viz také