about_Format.ps1xml

Korte beschrijving

Vanaf PowerShell 6 worden de standaardweergaven voor objecten gedefinieerd in de Broncode van PowerShell.

U kunt uw eigen Format.ps1xml bestanden maken om de weergave van objecten te wijzigen of om standaardweergaven te definiëren voor nieuwe objecttypen die u in PowerShell maakt.

Lange beschrijving

Vanaf PowerShell 6 worden de standaardweergaven gedefinieerd in de Broncode van PowerShell. De Format.ps1xml bestanden uit PowerShell 5.1 en eerdere versies bestaan niet in PowerShell 6 en latere versies.

De PowerShell-broncode definieert de standaardweergave van objecten in de PowerShell-console. U kunt uw eigen Format.ps1xml bestanden maken om de weergave van objecten te wijzigen of om standaardweergaven te definiëren voor nieuwe objecttypen die u in PowerShell maakt.

Wanneer PowerShell een object weergeeft, 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 de pijplijn worden doorgegeven 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
  • Wijd
  • Aangepast telefoonnummer

Wanneer de uitvoer van een Get-ChildItem opdracht bijvoorbeeld wordt doorgesluisd naar een Format-List opdracht, Format-List gebruikt u de lijstweergave die is gedefinieerd in de broncode om te bepalen hoe de bestands- en mapobjecten als een lijst moeten worden weergegeven.

Wanneer een opmaakbestand meer dan één weergave van een object bevat, past PowerShell de eerste weergave toe die wordt gevonden.

In een aangepast Format.ps1xml 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 weergave. De indeling in Format.ps1xml bestanden wordt toegepast net voordat de gegevens aan de gebruiker worden gepresenteerd.

Nieuwe Format.ps1xml-bestanden maken

Als u de weergave-indeling van een bestaande objectweergave wilt wijzigen of weergaven wilt toevoegen voor nieuwe objecten, maakt u uw eigen Format.ps1xml bestanden en voegt u deze vervolgens toe aan uw PowerShell-sessie.

Als u een Format.ps1xml bestand 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 waartoe PowerShell toegang 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 de tags om de weergave te wijzigen. Als u een weergave wilt maken voor een nieuw objecttype, 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 onderzoekt.

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 heeft op 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 de wijziging wilt aanbrengen in alle toekomstige sessies, voegt u de Update-FormatData opdracht toe aan uw PowerShell-profiel.

Voorbeeld: Agendagegevens toevoegen aan cultuurobjecten

In dit voorbeeld ziet u hoe u de opmaak van de cultuurobjecten System.Globalization.CultureInfo wijzigt die door de Get-Culture cmdlet in de huidige PowerShell-sessie wordt gegenereerd. Met de opdrachten in het voorbeeld wordt de eigenschap Agenda toegevoegd aan de weergave van cultuurobjecten in de standaardtabelweergave.

Als u wilt beginnen, haalt u de indelingsgegevens op uit het broncodebestand en maakt u een Format.ps1xml bestand dat de 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. Met de volgende XML worden de weergaven van het Object CultureInfo gedefinieerd.

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 Agenda door een nieuwe set <TableColumnHeader> tags toe te voegen. De waarde van de eigenschap Agenda 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 toe voor Agenda in de tabelrijen met behulp van de <TableColumnItem> en <PropertyName tags:

<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. Hiermee Update-FormatData voegt u het nieuwe indelingsbestand toe aan de huidige PowerShell-sessie.

In dit voorbeeld wordt de parameter PrependPath gebruikt om het nieuwe bestand in een hogere prioriteitsvolgorde 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, typt Get-Culture en controleert u de uitvoer die de eigenschap Agenda 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 <View> tags die elke weergave definiëren. Een typische <View> tag bevat de volgende tags:

  • <Name> geeft de naam van de weergave aan.
  • <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><WideControl>, en <CustomControl> bevatten de tags die aangeven hoe elk item wordt weergegeven.

ViewSelectedBy-tag

De <ViewSelectedBy> tag kan een <TypeName> tag bevatten voor elk 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 <PropertyName> tag waarmee de objecteigenschap wordt opgegeven waarmee items moeten worden gegroepeerd. Het bevat ook een <Label> tag waarmee een tekenreeks wordt opgegeven die moet worden gebruikt als label voor elke groep of een <CustomControlName> tag die verwijst naar een aangepast besturingselement dat ergens anders is gedefinieerd met behulp van een <Control> tag. De <Control> tag bevat een <Name> tag en een <CustomControl> tag.

TableControlTag

De <TableControl> tag bevat <TableHeaders> meestal en <TableRowEntries> tags waarmee de opmaak voor de hoofden en rijen van de tabel wordt gedefinieerd. De <TableHeaders> tag bevat <TableColumnHeader> doorgaans tags die tags bevatten <Label>, <Width>en <Alignment> tags. De <TableRowEntries> tag bevat <TableRowEntry> tags voor elke rij in de tabel. De <TableRowEntry> tag bevat een <TableColumnItems> tag die een <TableColumnItem> tag bevat voor elke kolom in de rij. Normaal gesproken bevat de <TableColumnItem> tag een <PropertyName> tag die de objecteigenschap identificeert die moet worden weergegeven op de gedefinieerde locatie of een <ScriptBlock> tag die scriptcode bevat waarmee een resultaat wordt berekend dat op de locatie moet worden weergegeven.

Notitie

Scriptblokken kunnen ook ergens anders worden gebruikt op locaties waar berekende resultaten nuttig kunnen zijn.

De <TableColumnItem> tag kan ook een <FormatString> tag bevatten die aangeeft hoe de 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 bevatten <PropertyName> . De <PropertyName> tags geven de objecteigenschap op die moet worden weergegeven op de opgegeven locatie in de lijst. Als de weergaveselectie is gedefinieerd met behulp van een selectieset, kunnen de <ListControl> tags ook een <EntrySelectedBy> tag bevatten die een of meer <TypeName> tags <ListEntry> bevat. Met deze <TypeName> tags wordt het objecttype opgegeven dat de <ListControl> tag moet weergeven.

WideControl-tag

De <WideControl> tag bevat doorgaans een <WideEntries> tag. De <WideEntries> tag bevat een of meer <WideEntry> tags. Een <WideEntry> tag bevat één <WideItem> tag.

Een <WideItem> tag moet een <PropertyName> tag of tag <ScriptBlock> bevatten. Een <PropertyName> tag geeft de eigenschap op die moet worden weergegeven op de opgegeven locatie in de weergave. Een <ScriptBlock> tag geeft een script op dat moet worden geëvalueerd en weergegeven op de opgegeven locatie in de weergave.

Een <WideItem> tag kan een <FormatString> tag bevatten die aangeeft hoe de eigenschap moet worden weergegeven.

CustomControl-tag

Met de <CustomControl> tag kunt u een scriptblok gebruiken om een indeling te definiëren. Een <CustomControl> tag bevat doorgaans een <CustomEntries> tag die meerdere <CustomEntry> tags bevat. Elke <CustomEntry> tag bevat een <CustomItem> tag die verschillende tags kan bevatten die inhoud en opmaak van de opgegeven locatie in de weergave opgeven, waaronder <Text><Indentation>, en <ExpressionBinding><NewLine> tags.

Gebruik van traceringsindeling.ps1xml-bestanden

Als u fouten in het laden of toepassen van Format.ps1xml bestanden wilt detecteren, gebruikt u de Trace-Command cmdlet met een van de volgende indelingsonderdelen als de waarde van de parameter Name :

  • FormatFileLoading
  • FormatViewBinding

Zie Trace-Command en Get-TraceSource voor meer informatie.

Een format.ps1xml-bestand ondertekenen

Als u de gebruikers van uw Format.ps1xml bestand wilt beveiligen, ondertekent u het bestand met een digitale handtekening. Zie about_Signing voor meer informatie.

Voorbeeld-XML voor een aangepaste Format-Table weergave

In het volgende XML-voorbeeld wordt een Format-Table aangepaste weergave gemaakt voor de system.IO.DirectoryInfo - en System.IO.FileInfo-objecten die zijn gemaakt door Get-ChildItem. De aangepaste weergave heet mygciview en voegt de kolom CreationTime toe aan de tabel.

Als u de aangepaste weergave wilt maken, gebruikt u de Get-FormatData en Export-FormatData cmdlets om een .ps1xml bestand te genereren. Bewerk vervolgens uw .ps1xml bestand om de code voor uw aangepaste weergave te maken. Het .ps1xml bestand kan worden opgeslagen in elke map waartoe PowerShell toegang heeft. Bijvoorbeeld een submap van $HOME.

Nadat het .ps1xml bestand is gemaakt, gebruikt u de Update-FormatData cmdlet om de weergave op te nemen in de huidige PowerShell-sessie. Of voeg de opdracht Bijwerken toe aan uw PowerShell-profiel als u de weergave nodig hebt die beschikbaar is in alle PowerShell-sessies.

In dit voorbeeld moet de aangepaste weergave de tabelindeling gebruiken, anders Format-Table mislukt het.

Gebruik Format-Table de parameter Weergave om de naam van de aangepaste weergave, mygciview op te geven en de uitvoer van de tabel op te maken met de kolom CreationTime . Zie Format-Table voor een voorbeeld van hoe de opdracht wordt uitgevoerd.

Notitie

Hoewel u de opmaak-XML kunt ophalen uit de broncode om een aangepaste weergave te maken, is er mogelijk meer ontwikkeling nodig om het gewenste resultaat te verkrijgen.

In de volgende Get-FormatData opdracht is er een alternatief voor de parameter PowerShellVersion om ervoor te zorgen dat alle lokale 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>

Zie ook