Delen via


about_Format.ps1xml

Korte beschrijving

De Format.ps1xml bestanden in PowerShell definiëren 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.

Lange beschrijving

De Format.ps1xml bestanden in PowerShell definiëren de standaardweergave van objecten in 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.

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.

PowerShell bevat zeven opmaakbestanden. Deze bestanden bevinden zich in de installatiemap ($PSHOME). Elk bestand definieert de weergave van een groep Microsoft .NET Framework-objecten:

  1. Certificate.Format.ps1xml

    Objecten in het certificaatarchief, zoals X.509-certificaten en certificaatarchieven.

  2. DotNetTypes.Format.ps1xml

    Andere .NET Framework-typen, zoals CultureInfo, FileVersionInfo en EventLogEntry-objecten.

  3. FileSystem.Format.ps1xml

    Bestandssysteemobjecten, zoals bestanden en mappen.

  4. Help.Format.ps1xml

    Help-weergaven, zoals gedetailleerde en volledige weergaven, parameters en voorbeelden.

  5. PowerShellCore.Format.ps1xml

    Objecten die worden gegenereerd door PowerShell-kern-cmdlets, zoals Get-Member en Get-History.

  6. PowerShellTrace.Format.ps1xml

    Traceer objecten, zoals objecten die zijn gegenereerd door de Trace-Command cmdlet.

  7. Registry.Format.ps1xml

    Registerobjecten, zoals sleutels en vermeldingen.

Een 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 weergave in het FileSystem.Format.ps1xml bestand gebruikt 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 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

De .ps1xml bestanden die zijn geïnstalleerd met PowerShell, worden digitaal ondertekend om manipulatie te voorkomen omdat de opmaak scriptblokken kan bevatten. 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 nieuw bestand wilt maken, kopieert u een bestaand Format.ps1xml bestand. Het nieuwe bestand kan elke naam hebben, maar het moet een .ps1xml bestandsnaamextensie hebben. U kunt het nieuwe bestand in elke map plaatsen die toegankelijk is voor PowerShell, maar het is handig om de bestanden in de Installatiemap van PowerShell ($PSHOME) of in een submap van de installatiemap te plaatsen.

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 de Update-FormatData cmdlet 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.

De eerste stap is het zoeken naar het Format.ps1xml bestand dat de huidige weergave van de cultuurobjecten bevat. Met de volgende Select-String opdracht wordt het bestand gevonden:

$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>

Met deze opdracht wordt aangegeven dat de definitie zich in het DotNetTypes.Format.ps1xml bestand bevindt.

Met de volgende opdracht wordt de inhoud van het bestand gekopieerd naar een nieuw bestand. MyDotNetTypes.Format.ps1xml

Copy-Item $PSHome\DotNetTypes.format.ps1xml MyDotNetTypes.Format.ps1xml

Open het MyDotNetTypes.Format.ps1xml bestand in een XML- of teksteditor, zoals Visual Studio Code. Zoek de objectsectie System.Globalization.CultureInfo . In de volgende XML worden de weergaven van het Object CultureInfo gedefinieerd. Het object heeft alleen een TableControl-weergave .

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

Verwijder de rest van het bestand, met uitzondering van het openen <?xml>, <Configuration>en <ViewDefinitions> tags en de afsluitende <ViewDefinitions> en <Configuration> tags. Als er een digitale handtekening is, verwijdert u deze uit uw aangepaste Format.ps1xmlbestand.

Het MyDotNetTypes.Format.ps1xml bestand moet er nu uitzien als in het volgende voorbeeld:

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

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 $PSHOME\MyDotNetTypes.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.

Standaardweergaven in Types.ps1xml

De standaardweergave van sommige basisobjecttypen wordt gedefinieerd in het Types.ps1xml bestand in de $PSHOME map. De knooppunten hebben de naam PsStandardMembers en de subknooppunten gebruiken een van de volgende tags:

  • <DefaultDisplayProperty>
  • <DefaultDisplayPropertySet>
  • <DefaultKeyPropertySet>

Zie about_Types.ps1xml voor meer informatie.

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

De aangepaste weergave wordt gemaakt op basis van een bewerkte versie van het FileSystem.Format.ps1xml bestand dat is opgeslagen in $PSHOME PowerShell 5.1.

Nadat het aangepaste .ps1xml bestand is opgeslagen, gebruikt Update-FormatData u deze om de weergave op te nemen in een PowerShell-sessie. In dit voorbeeld moet de aangepaste weergave de tabelindeling gebruiken, anders Format-Table mislukt het.

Gebruik Format-Table deze parameter omde naam van de aangepaste weergave op te geven en de uitvoer van de tabel op te maken. Zie Format-Table voor een voorbeeld van hoe de opdracht wordt uitgevoerd.

$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

Notitie

Om het XML-voorbeeld binnen de regelbreedtebeperkingen aan te passen, was het noodzakelijk om enkele inspringing te comprimeren en regeleinden in de code te gebruiken.

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

Zie ook