about_Format.ps1xml

Kort beskrivning

Från och med PowerShell 6 definieras standardvyerna för objekt i PowerShell-källkoden.

Du kan skapa egna filer om du vill ändra visningen av objekt eller definiera standardvisning för Format.ps1xml 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 och senare versioner.

PowerShell-källkoden definierar standardvisningen av objekt i PowerShell-konsolen. Du kan skapa egna filer om du vill ändra visningen av objekt eller definiera standardvisning för Format.ps1xml nya objekttyper som du skapar i PowerShell.

När PowerShell visar ett objekt använder det 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 nedåt 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:

  • Tabell
  • Lista
  • Brett
  • Anpassad

När utdata från ett kommando exempelvis kommer till ett kommando, använder listvyn som definierats i källkoden för att avgöra hur fil- och mappobjekten ska visas som Get-ChildItem Format-List en Format-List lista.

När en formateringsfil innehåller mer än en vy av ett objekt, tillämpar PowerShell den första vyn som den hittar.

I en anpassad fil definieras en vy av en uppsättning XML-taggar som beskriver namnet på vyn, typen av objekt som den kan tillämpas på, kolumnrubrikerna och egenskaperna som visas i brödtexten Format.ps1xml i vyn. Formatet i Format.ps1xml filer tillämpas precis innan data presenteras för användaren.

Skapa nya xmlFormat.ps1filer

Om du vill ändra visningsformatet för en befintlig objektvy eller lägga till vyer för nya objekt skapar du dina egna filer och lägger sedan till dem i Format.ps1xml PowerShell-sessionen.

Om du vill skapa en fil för att definiera en anpassad vy använder du Format.ps1xml cmdletarna Get-FormatData och Export-FormatData. Redigera filen med hjälp av en textredigerare. 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 en 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 Update-FormatData kommandot i din PowerShell-profil.

Exempel: Lägga till kalenderdata till kulturobjekt

Det här exemplet visar hur du ändrar formateringen för kulturobjekten System.Globalization.CultureInfo som genererats av Get-Culture cmdleten i den aktuella PowerShell-sessionen. Kommandona i exemplet lägger till egenskapen Calendar i standardtabellvyn för kulturobjekt.

Börja med att hämta formatdata från källkodsfilen och skapa en Format.ps1xml fil som innehåller den aktuella vyn över kulturobjekten.

Get-FormatData -TypeName System.Globalization.CultureInfo |
  Export-FormatData -Path $HOME\Format\CultureInfo.Format.ps1xml

Öppna filen CultureInfo.Format.ps1xml 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 i 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 Calendar genom att lägga till en ny uppsättning <TableColumnHeader> taggar. Värdet för egenskapen Calendar 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 Calendar i tabellraderna med <TableColumnItem> taggarna 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 en högre prioritetsordning än den ursprungliga filen. Mer information finns i Update-FormatData.

Update-FormatData -PrependPath $HOME\Format\CultureInfo.Format.ps1xml

Testa ändringen genom att skriva Get-Culture och granska de utdata som innehåller egenskapen Calendar.

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ällkodsdatabasen på GitHub.

Avsnittet ViewDefinitions för varje Format.ps1xml fil innehåller de taggar som <View> definierar varje vy. En vanlig <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 kombineras i grupper.
  • <TableControl>, <ListControl> <WideControl> , och innehåller de taggar som anger <CustomControl> hur varje objekt ska visas.

ViewSelectedBy-tagg

Taggen <ViewSelectedBy> kan innehålla en tagg för varje <TypeName> objekttyp som vyn gäller för. Eller så kan den innehålla en <SelectionSetName> tagg som refererar till en urvalsuppsättning som definieras någon annanstans med hjälp av en <SelectionSet> tagg.

GroupBy-tagg

Taggen <GroupBy> innehåller en tagg som anger vilken <PropertyName> objektegenskap som objekt ska grupperas efter. Den innehåller också antingen en tagg som anger en sträng som ska användas som en etikett för varje grupp eller en tagg som refererar till en anpassad kontroll som definierats någon annanstans med <Label> hjälp av en <CustomControlName> <Control> tagg. Taggen <Control> innehåller en tagg och en <Name> <CustomControl> tagg.

TableControlTag

Taggen <TableControl> innehåller <TableHeaders> vanligtvis <TableRowEntries> taggarna och som definierar formateringen för tabellens huvuden och rader. Taggen <TableHeaders> innehåller vanligtvis taggar som innehåller <TableColumnHeader> <Label> <Width> taggarna , och <Alignment> . Taggen <TableRowEntries> innehåller taggar för varje rad i <TableRowEntry> tabellen. Taggen <TableRowEntry> innehåller en tagg som innehåller en tagg för varje kolumn på <TableColumnItems> <TableColumnItem> raden. Normalt innehåller taggen antingen en tagg som identifierar objektegenskapen som ska visas på den definierade platsen eller en tagg som innehåller skriptkod som beräknar ett resultat som ska visas på <TableColumnItem> <PropertyName> <ScriptBlock> platsen.

Anteckning

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 tagg som anger hur egenskapen eller det beräknade resultatet ska <FormatString> 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 taggar som innehåller <ListItem> <PropertyName> taggar. Taggarna <PropertyName> anger den objektegenskap som ska visas på den angivna platsen i listan. Om vymarkeringen definieras med en urvalsuppsättning kan taggarna och <ListControl> även innehålla en tagg som innehåller en eller flera <ListEntry> <EntrySelectedBy> <TypeName> taggar. De <TypeName> här taggarna anger den objekttyp <ListControl> som taggen ä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 vanligtvis en tagg som anger vilken egenskap som ska visas på den angivna platsen i <PropertyName> vyn. Taggen <PropertyName> kan innehålla en tagg som anger hur egenskapen ska <FormatString> 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 tagg som innehåller flera <CustomEntries> <CustomEntry> taggar. Varje tagg innehåller en tagg som kan innehålla en mängd olika taggar som anger innehåll och formatering för den angivna platsen i vyn, inklusive <CustomEntry> <CustomItem> <Text> <Indentation> taggarna , <ExpressionBinding> , och <NewLine> .

Spårning Format.ps1xml-filanvändning

Om du vill identifiera fel vid inläsning eller tillämpning av filer använder du cmdleten med någon av följande formatkomponenter som Format.ps1xml värde för Trace-Command parametern Name:

  • FormatFileLoading
  • FormatViewBinding

Mer information finns i Trace-Command och Get-TraceSource.

Signera en xmlFormat.ps1fil

Om du vill skydda användarna av Format.ps1xml filen signerar du filen med en digital signatur. Mer information finns i about_Signing.

Xml-exempel för en Format-Table anpassad vy

Följande XML-exempel skapar en Format-Table anpassad vy för objekten System.IO.DirectoryInfo och System.IO.FileInfo 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 Export-FormatData cmdletarna och för att generera en .ps1xml fil. Redigera sedan filen .ps1xml för att skapa koden för din anpassade vy. Filen .ps1xml kan lagras i valfri katalog som PowerShell kan komma åt. Till exempel en underkatalog för $HOME .

När filen .ps1xml har skapats använder du Update-FormatData cmdleten för att inkludera vyn i den aktuella PowerShell-sessionen. Du kan också lägga till uppdateringskommandot i din PowerShell-profil 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 med parametern Visa för att ange namnet på den anpassade Format-Table vyn, mygciview och formatera tabellens utdata med kolumnen CreationTime. Ett exempel på hur kommandot körs finns i Format-Table.

Anteckning

Även om du kan hämta xml-formateringen från källkoden för att skapa en anpassad vy kan du behöva mer utveckling för att få önskat resultat.

I följande kommando Get-FormatData 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>

Se även

Export-FormatData

Get-FormatData

Get-TraceSource

XML-referens för formatschema

Trace-Command

Update-FormatData

Skriva en PowerShell-formateringsfil