Delen via


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 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 deze 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
  • Lijst
  • 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 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 deze 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 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 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 wijzigt van de cultuurobjecten Die door System.Globalization.CultureInfo worden 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.

Om te beginnen haalt u de indelingsgegevens op uit het broncodebestand en maakt u een Format.ps1xml bestand met de huidige weergave van de cultuurobjecten.

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. De volgende XML definieert de weergaven van het object CultureInfo .

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>

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

Sla het bestand op en sluit het. Gebruik Update-FormatData om het nieuwe indelingsbestand toe te voegen 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 PowerShell-broncodeopslagplaats 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.

Tag ViewSelectedBy

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 die de objecteigenschap aangeeft waarop 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 elders 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 tags en <TableRowEntries> waarmee de opmaak voor de hoofden en rijen van de tabel wordt gedefinieerd. De <TableHeaders> tag bevat <TableColumnHeader> doorgaans tags die , <Width>en-tags <Alignment> bevatten<Label>. 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 elders 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 en <ListEntry> ook een <EntrySelectedBy> tag bevatten die een of meer <TypeName> tags bevat. Met deze <TypeName> tags wordt het objecttype opgegeven dat de <ListControl> tag moet weergeven.

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 aan die moet worden weergegeven op de opgegeven locatie in de weergave. Een <ScriptBlock> tag geeft een script aan 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 meestal een <CustomEntries> tag die meerdere <CustomEntry> tags bevat. Elke <CustomEntry> tag bevat een <CustomItem> tag die verschillende tags kan bevatten waarmee de inhoud en opmaak van de opgegeven locatie in de weergave worden opgegeven, waaronder <Text>tags , <Indentation>, <ExpressionBinding>en <NewLine> .

Bestandsgebruik format.ps1xml traceren

Als u fouten wilt detecteren bij het laden of toepassen van Format.ps1xml bestanden, 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 Bestand Format.ps1xml 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 Format-Table aangepaste weergave

Met 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 cmdlets en Export-FormatData 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 met de parameter View 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 uit 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 PowerShellVersion-parameter 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