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:
Certificate.Format.ps1xml
Objekty v úložišti certifikátů, například certifikáty X.509 a úložiště certifikátů.
DotNetTypes.Format.ps1xml
Jiné typy rozhraní .NET Framework, jako jsou CultureInfo, FileVersionInfo a EventLogEntry objekty.
FileSystem.Format.ps1xml
Objekty systému souborů, jako jsou soubory a adresáře.
Help.Format.ps1xml
Zobrazení nápovědy, jako jsou podrobná a úplná zobrazení, parametry a příklady.
PowerShellCore.Format.ps1xml
Objekty generované základními rutinami PowerShellu, například
Get-Member
aGet-History
.PowerShellTrace.Format.ps1xml
Trasování objektů, jako jsou objekty vygenerované rutinou
Trace-Command
.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.ps1xml
souboru.
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>