about_Format.ps1xml
Korte beschrijving
Vanaf PowerShell 6 worden de standaardweergaven voor objecten gedefinieerd in PowerShell-broncode.
U kunt uw eigen Format.ps1xml
bestanden maken om de weergave van objecten te wijzigen of om standaardweergaven te definiëren voor nieuwe objecttypen die u in PowerShell maakt.
Lange beschrijving
Vanaf PowerShell 6 worden de standaardweergaven gedefinieerd in PowerShell-broncode. De Format.ps1xml
bestanden van PowerShell 5.1 en eerdere versies bestaan niet in PowerShell 6 en latere versies.
De PowerShell-broncode definieert de standaardweergave van objecten in de PowerShell-console. U kunt uw eigen Format.ps1xml
bestanden maken om de weergave van objecten te wijzigen of om standaardweergaven te definiëren voor nieuwe objecttypen die u in PowerShell maakt.
Wanneer PowerShell een object weergeeft, worden de gegevens in gestructureerde opmaakbestanden gebruikt om de standaardweergave van het object te bepalen. De gegevens in de opmaakbestanden bepalen of het object wordt weergegeven in een tabel of in een lijst, en bepaalt welke eigenschappen standaard worden weergegeven.
De opmaak is alleen van invloed op de weergave. Dit heeft geen invloed op welke objecteigenschappen de pijplijn worden doorgegeven of hoe deze worden doorgegeven. Format.ps1xml
bestanden kunnen niet worden gebruikt om de uitvoerindeling voor hash-tabellen aan te passen.
Een .ps1xml
opmaakbestand kan vier verschillende weergaven van elk object definiëren:
- Tabel
- Lijst
- Breed
- Aangepast telefoonnummer
Wanneer de uitvoer van een Get-ChildItem
opdracht bijvoorbeeld wordt doorgesluisd naar een Format-List
opdracht, Format-List
wordt de lijstweergave gebruikt die is gedefinieerd in de broncode om te bepalen hoe de bestands- en mapobjecten als een lijst moeten worden weergegeven.
Wanneer een opmaakbestand meer dan één weergave van een object bevat, past PowerShell de eerste weergave toe die wordt gevonden.
In een aangepast Format.ps1xml
bestand wordt een weergave gedefinieerd door een set XML-tags die de naam van de weergave beschrijven, het type object waarop deze kan worden toegepast, de kolomkoppen en de eigenschappen die worden weergegeven in de hoofdtekst van de weergave. De indeling in Format.ps1xml
bestanden wordt toegepast net voordat de gegevens aan de gebruiker worden gepresenteerd.
Nieuwe Format.ps1xml-bestanden maken
Als u de weergave-indeling van een bestaande objectweergave wilt wijzigen of weergaven voor nieuwe objecten wilt toevoegen, maakt u uw eigen Format.ps1xml
bestanden en voegt u deze vervolgens toe aan uw PowerShell-sessie.
Als u een Format.ps1xml
bestand wilt maken om een aangepaste weergave te definiëren, gebruikt u de cmdlets Get-FormatData en Export-FormatData . Gebruik een teksteditor om het bestand te bewerken. Het bestand kan worden opgeslagen in elke map waartoe PowerShell toegang heeft, zoals een submap van $HOME
.
Als u de opmaak van een huidige weergave wilt wijzigen, zoekt u de weergave in het opmaakbestand en gebruikt u de tags om de weergave te wijzigen. Als u een weergave voor een nieuw objecttype wilt maken, maakt u een nieuwe weergave of gebruikt u een bestaande weergave als model. De tags worden beschreven in de volgende sectie. Vervolgens kunt u alle andere weergaven in het bestand verwijderen, zodat de wijzigingen duidelijk zijn voor iedereen die het bestand onderzoekt.
Nadat u de wijzigingen hebt opgeslagen, gebruikt u Update-FormatData om het nieuwe bestand toe te voegen aan uw PowerShell-sessie. Als u wilt dat uw weergave voorrang heeft op een weergave die is gedefinieerd in de ingebouwde bestanden, gebruikt u de parameter PrependPath . Update-FormatData
is alleen van invloed op de huidige sessie. Als u de wijziging wilt aanbrengen in alle toekomstige sessies, voegt u de Update-FormatData
opdracht toe aan uw PowerShell-profiel.
Voorbeeld: Agendagegevens toevoegen aan cultuurobjecten
In dit voorbeeld ziet u hoe u de opmaak wijzigt van de cultuurobjecten Die door System.Globalization.CultureInfo worden gegenereerd door de Get-Culture
cmdlet in de huidige PowerShell-sessie. Met de opdrachten in het voorbeeld wordt de eigenschap Agenda toegevoegd aan de standaardtabelweergave van cultuurobjecten.
Om te beginnen haalt u de indelingsgegevens op uit het broncodebestand en maakt u een Format.ps1xml
bestand met de huidige weergave van de cultuurobjecten.
Get-FormatData -TypeName System.Globalization.CultureInfo |
Export-FormatData -Path $HOME\Format\CultureInfo.Format.ps1xml
Open het CultureInfo.Format.ps1xml
bestand in een XML- of teksteditor, zoals Visual Studio Code. De volgende XML definieert de weergaven van het object CultureInfo .
Het CultureInfo.Format.ps1xml
bestand moet eruitzien als in het volgende voorbeeld:
<?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>
Creatie een nieuwe kolom voor de eigenschap Agenda door een nieuwe set <TableColumnHeader>
tags toe te voegen. De waarde van de eigenschap Calendar kan lang zijn, dus geef een waarde van 45 tekens op als de <Width>
.
<TableHeaders>
<TableColumnHeader>
<Width>16</Width>
</TableColumnHeader>
<TableColumnHeader>
<Width>16</Width>
</TableColumnHeader>
<TableColumnHeader>
<Width>45</Width>
</TableColumnHeader>
<TableColumnHeader/>
</TableHeaders>
Voeg een nieuw kolomitem voor Agenda toe aan de tabelrijen met behulp van de <TableColumnItem>
tags en <PropertyName
:
<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>
Sla het bestand op en sluit het. Gebruik Update-FormatData
om het nieuwe indelingsbestand toe te voegen aan de huidige PowerShell-sessie.
In dit voorbeeld wordt de parameter PrependPath gebruikt om het nieuwe bestand in een hogere prioriteitsvolgorde te plaatsen dan het oorspronkelijke bestand. Zie Update-FormatData voor meer informatie.
Update-FormatData -PrependPath $HOME\Format\CultureInfo.Format.ps1xml
Als u de wijziging wilt testen, typt Get-Culture
en controleert u de uitvoer die de eigenschap Agenda bevat.
Get-Culture
LCID Name Calendar DisplayName
---- ---- -------- -----------
1033 en-US System.Globalization.GregorianCalendar English (United States)
De XML in Format.ps1xml-bestanden
De volledige schemadefinitie vindt u in Format.xsd in de PowerShell-broncodeopslagplaats op GitHub.
De sectie ViewDefinitions van elk Format.ps1xml
bestand bevat de <View>
tags die elke weergave definiëren. Een typische <View>
tag bevat de volgende tags:
<Name>
identificeert de naam van de weergave.<ViewSelectedBy>
hiermee geeft u het objecttype of de typen op waarop de weergave van toepassing is.<GroupBy>
hiermee geeft u op hoe items in de weergave worden gecombineerd in groepen.<TableControl>
,<ListControl>
,<WideControl>
en<CustomControl>
bevatten de tags die aangeven hoe elk item wordt weergegeven.
Tag ViewSelectedBy
De <ViewSelectedBy>
tag kan een <TypeName>
tag bevatten voor elk objecttype waarop de weergave van toepassing is. Het kan ook een <SelectionSetName>
tag bevatten die verwijst naar een selectieset die elders is gedefinieerd met behulp van een <SelectionSet>
tag.
GroupBy-tag
De <GroupBy>
tag bevat een <PropertyName>
tag die de objecteigenschap aangeeft waarop items moeten worden gegroepeerd. Het bevat ook een <Label>
tag die een tekenreeks aangeeft die moet worden gebruikt als label voor elke groep of een <CustomControlName>
tag die verwijst naar een aangepast besturingselement dat elders is gedefinieerd met behulp van een <Control>
tag. De <Control>
tag bevat een <Name>
tag en een <CustomControl>
tag.
TableControlTag
De <TableControl>
tag bevat <TableHeaders>
doorgaans tags en <TableRowEntries>
waarmee de opmaak voor de hoofden en rijen van de tabel wordt gedefinieerd. De <TableHeaders>
tag bevat <TableColumnHeader>
doorgaans tags die , <Width>
en-tags <Alignment>
bevatten<Label>
. De <TableRowEntries>
tag bevat <TableRowEntry>
tags voor elke rij in de tabel. De <TableRowEntry>
tag bevat een <TableColumnItems>
tag die een <TableColumnItem>
tag bevat voor elke kolom in de rij. Normaal gesproken bevat de <TableColumnItem>
tag een <PropertyName>
tag die de objecteigenschap identificeert die moet worden weergegeven op de gedefinieerde locatie, of een <ScriptBlock>
tag die scriptcode bevat waarmee een resultaat wordt berekend dat op de locatie moet worden weergegeven.
Notitie
Scriptblokken kunnen ook elders worden gebruikt op locaties waar berekende resultaten nuttig kunnen zijn.
De <TableColumnItem>
tag kan ook een <FormatString>
tag bevatten die aangeeft hoe de eigenschap of de berekende resultaten worden weergegeven.
ListControl-tag
De <ListControl>
tag bevat meestal een <ListEntries>
tag. De <ListEntries>
tag bevat een <ListEntry>
tag. De <ListEntry>
tag bevat een <ListItems>
tag. De <ListItems>
tag bevat <ListItem>
tags, die tags bevatten <PropertyName>
. De <PropertyName>
tags geven de objecteigenschap op die moet worden weergegeven op de opgegeven locatie in de lijst. Als de weergaveselectie is gedefinieerd met behulp van een selectieset, kunnen de <ListControl>
tags en <ListEntry>
ook een <EntrySelectedBy>
tag bevatten die een of meer <TypeName>
tags bevat. Met deze <TypeName>
tags wordt het objecttype opgegeven dat de <ListControl>
tag moet weergeven.
WideControl-tag
De <WideControl>
tag bevat meestal een <WideEntries>
tag. De <WideEntries>
tag bevat een of meer <WideEntry>
tags. Een <WideEntry>
tag bevat één <WideItem>
tag.
Een <WideItem>
tag moet een <PropertyName>
tag of een <ScriptBlock>
tag bevatten. Een <PropertyName>
tag geeft de eigenschap aan die moet worden weergegeven op de opgegeven locatie in de weergave. Een <ScriptBlock>
tag geeft een script aan dat moet worden geëvalueerd en weergegeven op de opgegeven locatie in de weergave.
Een <WideItem>
tag kan een <FormatString>
tag bevatten die aangeeft hoe de eigenschap moet worden weergegeven.
CustomControl-tag
Met de <CustomControl>
tag kunt u een scriptblok gebruiken om een indeling te definiëren. Een <CustomControl>
tag bevat meestal een <CustomEntries>
tag die meerdere <CustomEntry>
tags bevat. Elke <CustomEntry>
tag bevat een <CustomItem>
tag die verschillende tags kan bevatten waarmee de inhoud en opmaak van de opgegeven locatie in de weergave worden opgegeven, waaronder <Text>
tags , <Indentation>
, <ExpressionBinding>
en <NewLine>
.
Bestandsgebruik format.ps1xml traceren
Als u fouten wilt detecteren bij het laden of toepassen van Format.ps1xml
bestanden, gebruikt u de Trace-Command
cmdlet met een van de volgende indelingsonderdelen als de waarde van de parameter Name :
- FormatFileLoading
- FormatViewBinding
Zie Trace-Command en Get-TraceSource voor meer informatie.
Een Bestand Format.ps1xml ondertekenen
Als u de gebruikers van uw Format.ps1xml
bestand wilt beveiligen, ondertekent u het bestand met een digitale handtekening. Zie about_Signing voor meer informatie.
Voorbeeld-XML voor een Format-Table aangepaste weergave
Met het volgende XML-voorbeeld wordt een Format-Table
aangepaste weergave gemaakt voor de objecten System.IO.DirectoryInfo en System.IO.FileInfo die zijn gemaakt door Get-ChildItem
. De aangepaste weergave heet mygciview en voegt de kolom CreationTime toe aan de tabel.
Als u de aangepaste weergave wilt maken, gebruikt u de Get-FormatData
cmdlets en Export-FormatData
om een .ps1xml
bestand te genereren. Bewerk vervolgens het .ps1xml
bestand om de code voor uw aangepaste weergave te maken. Het .ps1xml
bestand kan worden opgeslagen in elke map waartoe PowerShell toegang heeft. Bijvoorbeeld een submap van $HOME
.
Nadat het .ps1xml
bestand is gemaakt, gebruikt u de Update-FormatData
cmdlet om de weergave op te nemen in de huidige PowerShell-sessie. Of voeg de updateopdracht toe aan uw PowerShell-profiel als u de weergave nodig hebt die beschikbaar is in alle PowerShell-sessies.
In dit voorbeeld moet de aangepaste weergave de tabelindeling gebruiken, anders Format-Table
mislukt het.
Gebruik Format-Table
met de parameter View om de naam van de aangepaste weergave, mygciview, op te geven en de uitvoer van de tabel op te maken met de kolom CreationTime . Zie Format-Table voor een voorbeeld van hoe de opdracht wordt uitgevoerd.
Notitie
Hoewel u de opmaak-XML uit de broncode kunt ophalen om een aangepaste weergave te maken, is er mogelijk meer ontwikkeling nodig om het gewenste resultaat te krijgen.
In de volgende Get-FormatData
opdracht is er een alternatief voor de PowerShellVersion-parameter om ervoor te zorgen dat alle lokale opmaakgegevens worden geretourneerd. Gebruik -PowerShellVersion $PSVersionTable.PSVersion
in plaats van een specifieke PowerShell-versie.
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>