about_Format.ps1xml

Korte beschrijving

Vanaf PowerShell 6 worden de standaardweergaven voor objecten gedefinieerd in PowerShell-broncode.

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 powerShell-broncode. De Format.ps1xml bestanden van PowerShell 5.1 en eerdere versies bestaan niet in PowerShell 6 en nieuwere 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 worden doorgegeven aan de pijplijn of hoe ze worden doorgegeven. Format.ps1xml bestanden kunnen niet worden gebruikt om de uitvoerindeling voor hash-tabellen aan te passen.

Een .ps1xml opmaakbestand kan vier verschillende weergaven van elk object definiëren:

  • Tabel
  • List
  • Breed
  • Aangepast telefoonnummer

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

Wanneer een opmaakbestand meerdere weergaven 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 als u weergaven voor nieuwe objecten wilt toevoegen, 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 voor een nieuw objecttype wilt maken, 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 krijgt 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 is gegenereerd door de Get-Culture cmdlet in de huidige PowerShell-sessie. Met de opdrachten in het voorbeeld wordt de eigenschap Agenda toegevoegd aan de standaardtabelweergave van cultuurobjecten.

Haal eerst de indelingsgegevens op uit het broncodebestand en maak 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. In de volgende XML worden de weergaven van het Object CultureInfo gedefinieerd.

Het CultureInfo.Format.ps1xml bestand moet eruitzien als in het volgende voorbeeld:

<?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>waarde .

<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 bestand. 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> identificeert de naam van de weergave.
  • <ViewSelectedBy> hiermee geeft u het objecttype of de typen op waarop de weergave van toepassing is.
  • <GroupBy> hiermee geeft u op 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 die een tekenreeks aangeeft 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> doorgaans en <TableRowEntries> tags die de opmaak voor de kop- en rijen van de tabel definiëren. 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 meestal 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 <ListEntry> ook een tag bevatten die een <EntrySelectedBy> of meer <TypeName> tags bevat. Met deze <TypeName> tags geeft u het objecttype op dat de <ListControl> tag moet worden weergegeven.

WideControl-tag

De <WideControl> tag bevat meestal 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 een <ScriptBlock> tag 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.

Tracering format.ps1xml-bestand gebruiken

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 Naam :

  • 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 weergave Opmaaktabel

In het volgende XML-voorbeeld wordt een Format-Table aangepaste weergave gemaakt voor de objecten System.IO.DirectoryInfo en System.IO.FileInfo 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 het .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 updateopdracht 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 dezeparameter om de naam van de aangepaste weergave, mygciview 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 van de broncode kunt ophalen om een aangepaste weergave te maken, is er mogelijk meer ontwikkeling nodig om het gewenste resultaat te krijgen.

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