about_Format.ps1xml
Korte beschrijving
Vanaf PowerShell 6 worden de standaardweergaven voor objecten gedefinieerd in de PowerShell-broncode.
U kunt uw eigen bestanden maken om de weergave van objecten te wijzigen of om standaardweergaven te definiëren voor nieuwe Format.ps1xml objecttypen die u in PowerShell maakt.
Lange beschrijving
Vanaf PowerShell 6 worden de standaardweergaven gedefinieerd in PowerShell-broncode. De bestanden van PowerShell 5.1 en eerdere versies bestaan niet Format.ps1xml in PowerShell 6 en latere versies.
De PowerShell-broncode definieert de standaardweergave van objecten in de PowerShell-console. U kunt uw eigen bestanden maken om de weergave van objecten te wijzigen of om standaardweergaven te definiëren voor nieuwe Format.ps1xml objecttypen die u in PowerShell maakt.
Wanneer PowerShell een -object we weergeven, 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 worden doorgegeven aan de pijplijn of hoe ze worden doorgegeven. Format.ps1xml -bestanden kunnen niet worden gebruikt om de uitvoerindeling voor hashtabellen aan te passen.
Een .ps1xml opmaakbestand kan vier verschillende weergaven van elk object definiëren:
- Tabel
- Lijst
- Breed
- Aangepast
Wanneer de uitvoer van een opdracht bijvoorbeeld wordt doorspijpt naar een opdracht, gebruikt de lijstweergave die is gedefinieerd in de broncode om te bepalen hoe het bestand en de mapobjecten als een lijst moeten worden Get-ChildItem Format-List Format-List weergegeven.
Wanneer een opmaakbestand meer dan één weergave van een object bevat, past PowerShell de eerste weergave toe die wordt gevonden.
In een aangepast bestand wordt een weergave gedefinieerd door een set XML-tags die de naam van de weergave beschrijven, het type object waarop het kan worden toegepast, de kolomkoppen en de eigenschappen die worden weergegeven in de hoofdtekst van de Format.ps1xml weergave. De indeling in Format.ps1xml bestanden wordt toegepast net voordat de gegevens aan de gebruiker worden gepresenteerd.
Nieuwe XMLFormat.ps1bestanden maken
Als u de weergave-indeling van een bestaande objectweergave wilt wijzigen of weergaven voor nieuwe objecten wilt toevoegen, maakt u uw eigen bestanden en voegt u deze Format.ps1xml vervolgens toe aan uw PowerShell-sessie.
Als u een bestand Format.ps1xml 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 waar PowerShell toegang toe 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 vervolgens 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 bekijkt.
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 krijgt boven 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 alle toekomstige sessies wilt wijzigen, voegt u de opdracht Update-FormatData toe aan uw PowerShell-profiel.
Voorbeeld: Agendagegevens toevoegen aan cultuurobjecten
In dit voorbeeld ziet u hoe u de opmaak wijzigt van de cultuurobjecten System.Globalization.CultureInfo die zijn gegenereerd door de Get-Culture cmdlet in de huidige PowerShell-sessie. Met de opdrachten in het voorbeeld wordt de eigenschap Calendar toegevoegd aan de standaardweergave van de tabel met cultuurobjecten.
Haal eerst de indelingsgegevens op uit het broncodebestand en maak een bestand dat de Format.ps1xml huidige weergave van de cultuurobjecten bevat.
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 er als volgt uitzien:
<?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>
Maak een nieuwe kolom voor de eigenschap Calendar door een nieuwe set tags toe te <TableColumnHeader> 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 Calendar toe aan de tabelrijen met behulp van de tags <TableColumnItem> 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 volgorde 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, Get-Culture typt en bekijkt u de uitvoer die de eigenschap Calendar 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 Opslagplaats voor PowerShell-broncode op GitHub.
De sectie ViewDefinitions van elk Format.ps1xml bestand bevat de tags die elke weergave <View> 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 waarop de weergave van toepassing is.<GroupBy>geeft aan hoe items in de weergave worden gecombineerd in groepen.<TableControl>,<ListControl>, en bevatten de tags die aangeven hoe elk item wordt<WideControl><CustomControl>weergegeven.
ViewSelectedBy-tag
De <ViewSelectedBy> tag kan een tag bevatten voor elk <TypeName> 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 tag waarmee de <PropertyName> object-eigenschap wordt opgegeven waarmee items moeten worden gegroepeerd. Het bevat ook een tag die een tekenreeks specificeert die moet worden gebruikt als een label voor elke groep of een tag die verwijst naar een aangepast besturingselement dat elders is gedefinieerd met behulp van <Label> <CustomControlName> een <Control> tag. De <Control> tag bevat een tag en een <Name> <CustomControl> tag.
TableControlTag
De tag bevat doorgaans tags en die de opmaak voor de kop en rijen van de tabel <TableControl> <TableHeaders> <TableRowEntries> definiëren. De <TableHeaders> tag bevat doorgaans tags die , en tags <TableColumnHeader> <Label> <Width> <Alignment> bevatten. De <TableRowEntries> tag bevat tags voor elke rij in de <TableRowEntry> tabel. De <TableRowEntry> tag bevat een tag die een tag bevat voor elke kolom in de <TableColumnItems> <TableColumnItem> rij. Normaal gesproken bevat de tag een tag die de object-eigenschap identificeert die moet worden weergegeven op de gedefinieerde locatie, of een tag die scriptcode bevat die een resultaat berekent dat moet worden weergegeven op de <TableColumnItem> <PropertyName> <ScriptBlock> locatie.
Notitie
Scriptblokken kunnen ook elders worden gebruikt op locaties waar berekende resultaten nuttig kunnen zijn.
De tag kan ook een tag bevatten die aangeeft hoe de <TableColumnItem> <FormatString> eigenschap of de berekende resultaten worden weergegeven.
ListControl-tag
De <ListControl> tag bevat doorgaans 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 <PropertyName> bevatten. De <PropertyName> tags geven de object-eigenschap op die moet worden weergegeven op de opgegeven locatie in de lijst. Als de weergaveselectie is gedefinieerd met behulp van een selectieset, kunnen de tags en ook een tag bevatten <ListControl> die een of meer tags <ListEntry> <EntrySelectedBy> <TypeName> bevat. Met <TypeName> deze tags geeft u het objecttype op dat de tag moet <ListControl> weergeven.
WideControl-tag
De <WideControl> tag bevat doorgaans een <WideEntries> tag. De <WideEntries> tag bevat een of meer <WideEntry> tags. Een tag bevat doorgaans een tag die de eigenschap specificeert die moet worden weergegeven op <WideEntry> de opgegeven locatie in de <PropertyName> weergave. De <PropertyName> tag kan een tag bevatten die aangeeft hoe de eigenschap moet worden <FormatString> weergegeven.
CustomControl-tag
Met <CustomControl> de tag kunt u een scriptblok gebruiken om een indeling te definiëren. Een <CustomControl> tag bevat doorgaans een tag die meerdere tags <CustomEntries> <CustomEntry> bevat. Elke tag bevat een tag die verschillende tags kan bevatten die de inhoud en opmaak van de opgegeven locatie in de weergave opgeven, zoals <CustomEntry> <CustomItem> , , en <Text> <Indentation> <ExpressionBinding> <NewLine> tags.
Gebruik van Format.ps1XML-bestand traceren
Als u fouten wilt detecteren bij het laden of toepassen van bestanden, gebruikt u de cmdlet met een van de volgende indelingsonderdelen als de waarde Format.ps1xml Trace-Command van de parameter Name:
- FormatFileLoading
- FormatViewBinding
Zie Trace-Command en Get-TraceSourcevoor meer informatie.
Een XMLFormat.ps1bestand ondertekenen
Als u de gebruikers van uw bestand wilt Format.ps1xml beveiligen, ondertekent u het bestand met behulp van een digitale handtekening. Zie voor meer informatie about_Signing.
Voorbeeld-XML voor een Format-Table weergave
Met het volgende XML-voorbeeld wordt een aangepaste weergave gemaakt voor de Format-Table objecten System.IO.DirectoryInfo en System.IO.FileInfo die zijn gemaakt door Get-ChildItem . De aangepaste weergave heeft de naam mygciview en voegt de kolom CreationTime toe aan de tabel.
Als u de aangepaste weergave wilt maken, gebruikt u Get-FormatData de Export-FormatData cmdlets en om een bestand te .ps1xml genereren. Bewerk vervolgens het bestand .ps1xml om de code voor uw aangepaste weergave te maken. Het .ps1xml bestand kan worden opgeslagen in elke map waar PowerShell toegang toe heeft. Bijvoorbeeld een subdirectory van $HOME .
Nadat het .ps1xml bestand is gemaakt, gebruikt u Update-FormatData de cmdlet om de weergave op te nemen in de huidige PowerShell-sessie. Of voeg de opdracht update toe aan uw PowerShell-profiel als u wilt dat de weergave beschikbaar is in alle PowerShell-sessies.
Voor dit voorbeeld moet de aangepaste weergave de tabelindeling gebruiken, anders Format-Table mislukt.
Gebruik met de parameter Weergave om de naam van de aangepaste Format-Table weergave, mygciview, op te geven en de uitvoer van de tabel op te maken met de kolom CreationTime. Zie Format-Tablevoor een voorbeeld van hoe de opdracht wordt uitgevoerd.
Notitie
Hoewel u de xml-opmaak uit de broncode kunt op halen om een aangepaste weergave te maken, is er mogelijk meer ontwikkeling nodig om het gewenste resultaat te krijgen.
In de volgende opdracht is er een alternatief voor de parameter PowerShellVersion om ervoor te zorgen dat alle lokale Get-FormatData 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>