about_Format.ps1xml
Kort beskrivning
Från och med PowerShell 6 definieras standardvyerna för objekt i PowerShell-källkoden.
Du kan skapa egna Format.ps1xml
filer för att ändra visning av objekt eller för att definiera standardvisning för nya objekttyper som du skapar i PowerShell.
Lång beskrivning
Från och med PowerShell 6 definieras standardvyerna i PowerShell-källkoden. Filerna Format.ps1xml
från PowerShell 5.1 och tidigare versioner finns inte i PowerShell 6 eller senare versioner.
PowerShell-källkoden definierar standardvisningen av objekt i PowerShell-konsolen. Du kan skapa egna Format.ps1xml
filer för att ändra visning av objekt eller för att definiera standardvisning för nya objekttyper som du skapar i PowerShell.
När PowerShell visar ett objekt används data i strukturerade formateringsfiler för att fastställa standardvisningen av objektet. Data i formateringsfilerna avgör om objektet återges i en tabell eller i en lista och avgör vilka egenskaper som visas som standard.
Formateringen påverkar endast visningen. Det påverkar inte vilka objektegenskaper som skickas i pipelinen eller hur de skickas. Format.ps1xml
filer kan inte användas för att anpassa utdataformatet för hash-tabeller.
En .ps1xml
formateringsfil kan definiera fyra olika vyer för varje objekt:
- Register
- List
- Bred
- Anpassat
När till exempel utdata från ett Get-ChildItem
kommando skickas till ett Format-List
kommando Format-List
använder listvyn som definierats i källkoden för att avgöra hur fil- och mappobjekten ska visas som en lista.
När en formateringsfil innehåller mer än en vy av ett objekt använder PowerShell den första vyn som hittas.
I en anpassad Format.ps1xml
fil definieras en vy av en uppsättning XML-taggar som beskriver namnet på vyn, vilken typ av objekt som den kan tillämpas på, kolumnrubrikerna och egenskaperna som visas i brödtexten i vyn. Formatet i Format.ps1xml
filer tillämpas precis innan data visas för användaren.
Skapa nya Format.ps1xml-filer
Om du vill ändra visningsformatet för en befintlig objektvy eller lägga till vyer för nya objekt skapar du egna Format.ps1xml
filer och lägger sedan till dem i PowerShell-sessionen.
Om du vill skapa en Format.ps1xml
fil för att definiera en anpassad vy använder du cmdletarna Get-FormatData och Export-FormatData . Använd en textredigerare för att redigera filen. Filen kan sparas i valfri katalog som PowerShell kan komma åt, till exempel en underkatalog till $HOME
.
Om du vill ändra formateringen för en aktuell vy letar du upp vyn i formateringsfilen och använder sedan taggarna för att ändra vyn. Om du vill skapa en vy för en ny objekttyp skapar du en ny vy eller använder en befintlig vy som modell. Taggarna beskrivs i nästa avsnitt. Du kan sedan ta bort alla andra vyer i filen så att ändringarna är uppenbara för alla som undersöker filen.
När du har sparat ändringarna använder du Update-FormatData för att lägga till den nya filen i PowerShell-sessionen. Om du vill att vyn ska ha företräde framför en vy som definierats i de inbyggda filerna använder du parametern PrependPath . Update-FormatData
påverkar endast den aktuella sessionen. Om du vill göra ändringen i alla framtida sessioner lägger du till kommandot i Update-FormatData
din PowerShell-profil.
Exempel: Lägga till kalenderdata i kulturobjekt
Det här exemplet visar hur du ändrar formateringen för kulturobjekten System.Globalization.CultureInfo som genereras av cmdleten Get-Culture
i den aktuella PowerShell-sessionen. Kommandona i exemplet lägger till egenskapen Kalender i standardtabellvyns visning av kulturobjekt.
Börja med att hämta formatdata från källkodsfilen och skapa en Format.ps1xml
fil som innehåller den aktuella vyn av kulturobjekten.
Get-FormatData -TypeName System.Globalization.CultureInfo |
Export-FormatData -Path $HOME\Format\CultureInfo.Format.ps1xml
CultureInfo.Format.ps1xml
Öppna filen i valfri XML- eller textredigerare, till exempel Visual Studio Code. Följande XML definierar vyerna för CultureInfo-objektet .
Filen CultureInfo.Format.ps1xml
bör se ut som följande exempel:
<?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>
Skapa en ny kolumn för egenskapen Kalender genom att lägga till en ny uppsättning <TableColumnHeader>
taggar. Värdet för egenskapen Kalender kan vara långt, så ange ett värde på 45 tecken som <Width>
.
<TableHeaders>
<TableColumnHeader>
<Width>16</Width>
</TableColumnHeader>
<TableColumnHeader>
<Width>16</Width>
</TableColumnHeader>
<TableColumnHeader>
<Width>45</Width>
</TableColumnHeader>
<TableColumnHeader/>
</TableHeaders>
Lägg till ett nytt kolumnobjekt för Kalender i tabellraderna med hjälp av taggarna <TableColumnItem>
och <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>
Spara och stäng filen. Använd Update-FormatData
för att lägga till den nya formatfilen i den aktuella PowerShell-sessionen.
I det här exemplet används parametern PrependPath för att placera den nya filen i högre prioritetsordning än den ursprungliga filen. Mer information finns i Update-FormatData.
Update-FormatData -PrependPath $HOME\Format\CultureInfo.Format.ps1xml
Om du vill testa ändringen skriver Get-Culture
och granskar du utdata som innehåller egenskapen Kalender .
Get-Culture
LCID Name Calendar DisplayName
---- ---- -------- -----------
1033 en-US System.Globalization.GregorianCalendar English (United States)
XML-filen i Format.ps1xml-filer
Den fullständiga schemadefinitionen finns i Format.xsd i PowerShell-källkodslagringsplatsen på GitHub.
Avsnittet ViewDefinitions för varje Format.ps1xml
fil innehåller taggarna <View>
som definierar varje vy. En typisk <View>
tagg innehåller följande taggar:
<Name>
identifierar namnet på vyn.<ViewSelectedBy>
anger den objekttyp eller de typer som vyn gäller för.<GroupBy>
anger hur objekt i vyn ska kombineras i grupper.<TableControl>
,<ListControl>
,<WideControl>
och<CustomControl>
innehåller taggarna som anger hur varje objekt ska visas.
ViewSelectedBy-tagg
Taggen <ViewSelectedBy>
kan innehålla en <TypeName>
tagg för varje objekttyp som vyn gäller för. Eller så kan den innehålla en <SelectionSetName>
tagg som refererar till en markeringsuppsättning som definieras någon annanstans med hjälp av en <SelectionSet>
tagg.
GroupBy-tagg
Taggen <GroupBy>
innehåller en <PropertyName>
tagg som anger objektegenskapen som objekt ska grupperas efter. Den innehåller också antingen en <Label>
tagg som anger en sträng som ska användas som en etikett för varje grupp eller en <CustomControlName>
tagg som refererar till en anpassad kontroll som definierats någon annanstans med hjälp av en <Control>
tagg. Taggen <Control>
innehåller en <Name>
tagg och en <CustomControl>
tagg.
TableControlTag
Taggen <TableControl>
innehåller <TableHeaders>
vanligtvis taggar och <TableRowEntries>
taggar som definierar formateringen för tabellens huvuden och rader. Taggen <TableHeaders>
innehåller <TableColumnHeader>
vanligtvis taggar som innehåller <Label>
, <Width>
och <Alignment>
taggar. Taggen <TableRowEntries>
innehåller <TableRowEntry>
taggar för varje rad i tabellen. Taggen <TableRowEntry>
innehåller en <TableColumnItems>
tagg som innehåller en <TableColumnItem>
tagg för varje kolumn i raden. Taggen <TableColumnItem>
innehåller vanligtvis antingen en <PropertyName>
tagg som identifierar objektegenskapen som ska visas på den definierade platsen eller en <ScriptBlock>
tagg som innehåller skriptkod som beräknar ett resultat som ska visas på platsen.
Kommentar
Skriptblock kan också användas någon annanstans på platser där beräknade resultat kan vara användbara.
Taggen <TableColumnItem>
kan också innehålla en <FormatString>
tagg som anger hur egenskapen eller de beräknade resultaten ska visas.
ListControl-tagg
Taggen <ListControl>
innehåller vanligtvis en <ListEntries>
tagg. Taggen <ListEntries>
innehåller en <ListEntry>
tagg. Taggen <ListEntry>
innehåller en <ListItems>
tagg. Taggen <ListItems>
innehåller <ListItem>
taggar som innehåller <PropertyName>
taggar. Taggarna <PropertyName>
anger den objektegenskap som ska visas på den angivna platsen i listan. Om visningsmarkeringen definieras med hjälp av en markeringsuppsättning kan taggarna <ListControl>
och <ListEntry>
även innehålla en <EntrySelectedBy>
tagg som innehåller en eller flera <TypeName>
taggar. De här <TypeName>
taggarna anger den objekttyp som taggen <ListControl>
är avsedd att visa.
WideControl-tagg
Taggen <WideControl>
innehåller vanligtvis en <WideEntries>
tagg. Taggen <WideEntries>
innehåller en eller flera <WideEntry>
taggar. En <WideEntry>
tagg innehåller en <WideItem>
tagg.
En <WideItem>
tagg måste innehålla antingen en <PropertyName>
tagg eller en <ScriptBlock>
tagg. En <PropertyName>
tagg anger den egenskap som ska visas på den angivna platsen i vyn. En <ScriptBlock>
tagg anger ett skript som ska utvärderas och visas på den angivna platsen i vyn.
En <WideItem>
tagg kan innehålla en <FormatString>
tagg som anger hur egenskapen ska visas.
CustomControl-tagg
Med <CustomControl>
taggen kan du använda ett skriptblock för att definiera ett format. En <CustomControl>
tagg innehåller vanligtvis en <CustomEntries>
tagg som innehåller flera <CustomEntry>
taggar. Varje <CustomEntry>
tagg innehåller en <CustomItem>
tagg som kan innehålla en mängd olika taggar som anger innehåll och formatering för den angivna platsen i vyn, inklusive <Text>
, <Indentation>
, <ExpressionBinding>
och <NewLine>
taggar.
Tracing Format.ps1xml-filanvändning
Om du vill identifiera fel vid inläsning eller program av Format.ps1xml
filer använder du cmdleten Trace-Command
med någon av följande formatkomponenter som värdet för parametern Namn :
- FormatFileLoading
- FormatViewBinding
Mer information finns i Trace-Command och Get-TraceSource.
Signera en Format.ps1xml-fil
Om du vill skydda användarna av filen Format.ps1xml
signerar du filen med en digital signatur. Mer information finns i about_Signing.
Exempel-XML för en anpassad vy för Format-Table
Följande XML-exempel skapar en Format-Table
anpassad vy för System.IO.DirectoryInfo- och System.IO.FileInfo-objekt som skapats av Get-ChildItem
. Den anpassade vyn heter mygciview och lägger till kolumnen CreationTime i tabellen.
Om du vill skapa den anpassade vyn använder du Get-FormatData
cmdletarna och Export-FormatData
för att generera en .ps1xml
fil. .ps1xml
Redigera sedan filen för att skapa koden för den anpassade vyn. Filen .ps1xml
kan lagras i valfri katalog som PowerShell kan komma åt. Till exempel en underkatalog till $HOME
.
.ps1xml
När filen har skapats använder du cmdleten Update-FormatData
för att inkludera vyn i den aktuella PowerShell-sessionen. Du kan också lägga till uppdateringskommandot i PowerShell-profilen om du behöver vyn tillgänglig i alla PowerShell-sessioner.
I det här exemplet måste den anpassade vyn använda tabellformatet, annars Format-Table
misslyckas.
Använd Format-Table
med parametern Visa för att ange den anpassade vyns namn, mygciview och formatera tabellens utdata med kolumnen CreationTime . Ett exempel på hur kommandot körs finns i Format-Table.
Kommentar
Även om du kan hämta xml-formateringen från källkoden för att skapa en anpassad vy, kan det behövas mer utveckling för att få önskat resultat.
I följande Get-FormatData
kommando finns det ett alternativ för PowerShellVersion-parametern för att säkerställa att all lokal formateringsinformation returneras. Använd -PowerShellVersion $PSVersionTable.PSVersion
i stället för en specifik PowerShell-version.
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>