about_Format.ps1xml
Kort beskrivning
Filerna Format.ps1xml
i PowerShell 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.
Lång beskrivning
Filerna Format.ps1xml
i PowerShell definierar standardvisningen av objekt i PowerShell. 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.
PowerShell innehåller sju formateringsfiler. Dessa filer finns i installationskatalogen ($PSHOME
). Varje fil definierar visningen av en grupp Microsoft .NET Framework-objekt:
Certificate.Format.ps1xml
Objekt i certifikatarkivet, till exempel X.509-certifikat och certifikatarkiv.
DotNetTypes.Format.ps1xml
Andra .NET Framework-typer som CultureInfo, FileVersionInfo och EventLogEntry-objekt.
FileSystem.Format.ps1xml
Filsystemobjekt, till exempel filer och kataloger.
Help.Format.ps1xml
Hjälpvyer, till exempel detaljerade och fullständiga vyer, parametrar och exempel.
PowerShellCore.Format.ps1xml
Objekt som genereras av PowerShell-kärn-cmdletar, till exempel
Get-Member
ochGet-History
.PowerShellTrace.Format.ps1xml
Spåra objekt, till exempel de som genereras av cmdleten
Trace-Command
.Registry.Format.ps1xml
Registerobjekt, till exempel nycklar och poster.
En 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 vyn i FileSystem.Format.ps1xml
filen 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 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
Filerna .ps1xml
som installeras med PowerShell signeras digitalt för att förhindra manipulering eftersom formateringen kan innehålla skriptblock. 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 ny fil kopierar du en befintlig Format.ps1xml
fil. Den nya filen kan ha valfritt namn, men den måste ha ett .ps1xml
filnamnstillägg. Du kan placera den nya filen i valfri katalog som är tillgänglig för PowerShell, men det är användbart att placera filerna i PowerShell-installationskatalogen ($PSHOME
) eller i en underkatalog i installationskatalogen.
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 cmdleten 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.
Det första steget är att hitta Format.ps1xml
filen som innehåller den aktuella vyn av kulturobjekten. Följande Select-String
kommando hittar filen:
$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>
Det här kommandot visar att definitionen finns i DotNetTypes.Format.ps1xml
filen.
Nästa kommando kopierar filinnehållet till en ny fil, MyDotNetTypes.Format.ps1xml
.
Copy-Item $PSHome\DotNetTypes.format.ps1xml MyDotNetTypes.Format.ps1xml
MyDotNetTypes.Format.ps1xml
Öppna filen i valfri XML- eller textredigerare, till exempel Visual Studio Code. Leta reda på objektavsnittet System.Globalization.CultureInfo . Följande XML definierar vyerna för CultureInfo-objektet . Objektet har bara en TableControl-vy .
<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>
Ta bort resten av filen, förutom de inledande <?xml>
taggarna , <Configuration>
och <ViewDefinitions>
taggarna och stängningen <ViewDefinitions>
och <Configuration>
taggarna. Om det finns en digital signatur tar du bort den från din anpassade Format.ps1xml
fil.
Filen MyDotNetTypes.Format.ps1xml
bör nu se ut som följande exempel:
<?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>
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 $PSHOME\MyDotNetTypes.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.
Standard visas i Types.ps1xml
Standardskärmarna för vissa grundläggande objekttyper definieras i Types.ps1xml
filen i $PSHOME
katalogen. Noderna heter PsStandardMembers och undernoderna använder någon av följande taggar:
<DefaultDisplayProperty>
<DefaultDisplayPropertySet>
<DefaultKeyPropertySet>
Mer information finns i about_Types.ps1xml.
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 exempel skapar en Format-Table
anpassad vy för System.IO.DirectoryInfo - och System.IO.FileInfo-objekten som skapats av Get-ChildItem
. Den anpassade vyn heter mygciview och lägger till kolumnen CreationTime i tabellen.
Den anpassade vyn skapas från en redigerad version av FileSystem.Format.ps1xml
filen som lagras i i $PSHOME
PowerShell 5.1.
När din anpassade .ps1xml
fil har sparats använder du Update-FormatData
för att inkludera vyn i en PowerShell-session. 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 namnet på den anpassade vyn och formatera tabellens utdata. Ett exempel på hur kommandot körs finns i 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
Kommentar
För att passa XML-exemplet inom radbreddsbegränsningar var det nödvändigt att komprimera vissa indrag och använda radbrytningar i koden.
<?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>