Dela via


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:

  1. Certificate.Format.ps1xml

    Objekt i certifikatarkivet, till exempel X.509-certifikat och certifikatarkiv.

  2. DotNetTypes.Format.ps1xml

    Andra .NET Framework-typer som CultureInfo, FileVersionInfo och EventLogEntry-objekt.

  3. FileSystem.Format.ps1xml

    Filsystemobjekt, till exempel filer och kataloger.

  4. Help.Format.ps1xml

    Hjälpvyer, till exempel detaljerade och fullständiga vyer, parametrar och exempel.

  5. PowerShellCore.Format.ps1xml

    Objekt som genereras av PowerShell-kärn-cmdletar, till exempel Get-Member och Get-History.

  6. PowerShellTrace.Format.ps1xml

    Spåra objekt, till exempel de som genereras av cmdleten Trace-Command .

  7. 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.ps1xmlfil.

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>

Se även