about_Format.ps1xml

Kurze Beschreibung

Die Format.ps1xml Dateien in PowerShell definieren die Standardanzeige von Objekten in der PowerShell-Konsole. Sie können eigene Format.ps1xml Dateien erstellen, um die Anzeige von Objekten zu ändern oder Standardanzeigen für neue Objekttypen zu definieren, die Sie in PowerShell erstellen.

Lange Beschreibung

Die Format.ps1xml Dateien in PowerShell definieren die Standardanzeige von Objekten in PowerShell. Sie können eigene Format.ps1xml Dateien erstellen, um die Anzeige von Objekten zu ändern oder Standardanzeigen für neue Objekttypen zu definieren, die Sie in PowerShell erstellen.

Wenn PowerShell ein Objekt anzeigt, werden die Daten in strukturierten Formatierungsdateien verwendet, um die Standardanzeige des Objekts zu bestimmen. Die Daten in den Formatierungsdateien bestimmen, ob das Objekt in einer Tabelle oder in einer Liste gerendert wird und bestimmt, welche Eigenschaften standardmäßig angezeigt werden.

Die Formatierung wirkt sich nur auf die Anzeige aus. Es wirkt sich nicht darauf aus, welche Objekteigenschaften an die Pipeline übergeben werden oder wie sie übergeben werden. Format.ps1xml Dateien können nicht verwendet werden, um das Ausgabeformat für Hashtabellen anzupassen.

PowerShell enthält sieben Formatierungsdateien. Diese Dateien befinden sich im Installationsverzeichnis ($PSHOME). Jede Datei definiert die Anzeige einer Gruppe von Microsoft .NET Framework-Objekten:

  1. Certificate.Format.ps1xml

    Objekte im Zertifikatspeicher, z. B. X.509-Zertifikate und Zertifikatspeicher.

  2. DotNetTypes.Format.ps1xml

    Andere .NET Framework-Typen, z. B. CultureInfo-, FileVersionInfo- und EventLogEntry-Objekte.

  3. FileSystem.Format.ps1xml

    Dateisystemobjekte, z. B. Dateien und Verzeichnisse.

  4. Help.Format.ps1xml

    Hilfeansichten, z. B. detaillierte und vollständige Ansichten, Parameter und Beispiele.

  5. PowerShellCore.Format.ps1xml

    Von PowerShell-Kern-Cmdlets generierte Objekte, z Get-Member . B. und Get-History.

  6. PowerShellTrace.Format.ps1xml

    Ablaufverfolgungsobjekte, z. B. vom Cmdlet generierte Trace-Command Objekte.

  7. Registry.Format.ps1xml

    Registrierungsobjekte, z. B. Schlüssel und Einträge.

Eine Formatierungsdatei kann vier verschiedene Ansichten jedes Objekts definieren:

  • Tabelle
  • Liste
  • Breit
  • Benutzerdefiniert

Wenn beispielsweise die Ausgabe eines Get-ChildItem Befehls an einen Format-List Befehl weitergeleitet wird, wird die Ansicht in der FileSystem.Format.ps1xml Datei verwendet, Format-List um zu bestimmen, wie die Datei- und Ordnerobjekte als Liste angezeigt werden.

Wenn eine Formatierungsdatei mehrere Ansichten eines Objekts enthält, wendet PowerShell die erste gefundene Ansicht an.

In einer Format.ps1xml Datei wird eine Ansicht durch eine Reihe von XML-Tags definiert, die den Namen der Ansicht beschreiben, den Typ des Objekts, auf das sie angewendet werden kann, die Spaltenüberschriften und die Eigenschaften, die im Textkörper der Ansicht angezeigt werden. Das Format in Format.ps1xml Dateien wird direkt vor der Darstellung der Daten für den Benutzer angewendet.

Erstellen neuer Format.ps1xml-Dateien

Die .ps1xml mit PowerShell installierten Dateien werden digital signiert, um Manipulationen zu verhindern, da die Formatierung Skriptblöcke enthalten kann. Wenn Sie das Anzeigeformat einer vorhandenen Objektansicht ändern oder Ansichten für neue Objekte hinzufügen möchten, erstellen Sie eigene Format.ps1xml Dateien, und fügen Sie sie dann ihrer PowerShell-Sitzung hinzu.

Um eine neue Datei zu erstellen, kopieren Sie eine vorhandene Format.ps1xml Datei. Die neue Datei kann einen beliebigen Namen haben, muss aber über eine .ps1xml Dateinamenerweiterung verfügen. Sie können die neue Datei in jedem Verzeichnis platzieren, auf das PowerShell zugreifen kann, aber es ist nützlich, die Dateien im PowerShell-Installationsverzeichnis ($PSHOME) oder in einem Unterverzeichnis des Installationsverzeichnisses zu platzieren.

Um die Formatierung einer aktuellen Ansicht zu ändern, suchen Sie die Ansicht in der Formatierungsdatei, und verwenden Sie dann die Tags, um die Ansicht zu ändern. Um eine Ansicht für einen neuen Objekttyp zu erstellen, erstellen Sie eine neue Ansicht, oder verwenden Sie eine vorhandene Ansicht als Modell. Die Tags werden im nächsten Abschnitt beschrieben. Anschließend können Sie alle anderen Ansichten in der Datei löschen, damit die Änderungen für jeden, der die Datei untersucht, offensichtlich sind.

Nachdem Sie die Änderungen gespeichert haben, verwenden Sie das Update-FormatData Cmdlet, um der PowerShell-Sitzung die neue Datei hinzuzufügen. Wenn Ihre Ansicht Vorrang vor einer in den integrierten Dateien definierten Ansicht haben soll, verwenden Sie den PrependPath-Parameter . Update-FormatData betrifft nur die aktuelle Sitzung. Um die Änderung an allen zukünftigen Sitzungen vorzunehmen, fügen Sie den Update-FormatData Befehl zu Ihrem PowerShell-Profil hinzu.

Beispiel: Hinzufügen von Kalenderdaten zu Kulturobjekten

In diesem Beispiel wird gezeigt, wie Sie die Formatierung der Kulturobjekte System.Globalization.CultureInfo ändern, die Get-Culture vom Cmdlet in der aktuellen PowerShell-Sitzung generiert wurden. Die Befehle im Beispiel fügen die Calendar-Eigenschaft zur Standardmäßigen Tabellenansichtsanzeige von Kulturobjekten hinzu.

Der erste Schritt besteht darin, die Format.ps1xml Datei zu finden, die die aktuelle Ansicht der Kulturobjekte enthält. Der folgende Select-String Befehl findet die Datei:

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

Mit diesem Befehl wird angezeigt, dass sich die Definition in der DotNetTypes.Format.ps1xml Datei befindet.

Der nächste Befehl kopiert den Dateiinhalt in eine neue Datei. MyDotNetTypes.Format.ps1xml

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

Öffnen Sie die MyDotNetTypes.Format.ps1xml Datei in einem beliebigen XML- oder Text-Editor, z. B. Visual Studio Code. Suchen Sie den Abschnitt "System.Globalization.CultureInfo ". Der folgende XML-Code definiert die Ansichten des CultureInfo-Objekts . Das Objekt verfügt nur über eine TableControl-Ansicht .

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

Löschen Sie den erneuten Standard der der Datei, mit Ausnahme der öffnenden <?xml>, <Configuration>und <ViewDefinitions> Tags sowie der Schließenden <ViewDefinitions> und <Configuration> Tags. Wenn eine digitale Signatur vorhanden ist, löschen Sie sie aus Ihrer benutzerdefinierten Format.ps1xmlDatei.

Die MyDotNetTypes.Format.ps1xml Datei sollte nun wie im folgenden Beispiel aussehen:

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

Erstellen Sie eine neue Spalte für die Kalendereigenschaft , indem Sie einen neuen Satz von <TableColumnHeader> Tags hinzufügen. Der Wert der Calendar-Eigenschaft kann lang sein. Geben Sie daher als Wert 45 Zeichen an <Width>.

<TableHeaders>
  <TableColumnHeader>
    <Width>16</Width>
  </TableColumnHeader>
  <TableColumnHeader>
    <Width>16</Width>
  </TableColumnHeader>
  <TableColumnHeader>
    <Width>45</Width>
  </TableColumnHeader>
  <TableColumnHeader/>
</TableHeaders>

Fügen Sie ein neues Spaltenelement für Kalender in den Tabellenzeilen mit den <TableColumnItem> folgenden <PropertyName Tags hinzu:

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

Speichern und schließen Sie die Datei. Dient Update-FormatData zum Hinzufügen der neuen Formatdatei zur aktuellen PowerShell-Sitzung.

In diesem Beispiel wird der PrependPath-Parameter verwendet, um die neue Datei in einer höheren Rangfolge als die ursprüngliche Datei zu platzieren. Weitere Informationen finden Sie unter Update-FormatData.

Update-FormatData -PrependPath $PSHOME\MyDotNetTypes.Format.ps1xml

Um die Änderung zu testen, geben Sie Get-Culture die Ausgabe ein, die die Calendar-Eigenschaft enthält.

Get-Culture
LCID Name  Calendar                               DisplayName
---- ----  --------                               -----------
1033 en-US System.Globalization.GregorianCalendar English (United States)

Xml in "Format.ps1xml"-Dateien

Die vollständige Schemadefinition finden Sie in "Format.xsd " im PowerShell-Quellcode-Repository auf GitHub.

Der ViewDefinitions-Abschnitt jeder Format.ps1xml Datei enthält die <View> Tags, die jede Ansicht definieren. Ein typisches <View> Tag enthält die folgenden Tags:

  • <Name> gibt den Namen der Ansicht an.
  • <ViewSelectedBy> Gibt den Objekttyp oder die Typen an, für den die Ansicht gilt.
  • <GroupBy> Gibt an, wie Elemente in der Ansicht in Gruppen kombiniert werden.
  • <TableControl>, <ListControl>, <WideControl>und <CustomControl> enthalten die Tags, die angeben, wie jedes Element angezeigt wird.

ViewSelectedBy-Tag

Das <ViewSelectedBy> Tag kann ein <TypeName> Tag für jeden Objekttyp enthalten, auf den die Ansicht angewendet wird. Sie kann auch ein <SelectionSetName> Tag enthalten, das auf einen Auswahlsatz verweist, der an anderer Stelle mithilfe eines <SelectionSet> Tags definiert ist.

GroupBy-Tag

Das <GroupBy> Tag enthält ein <PropertyName> Tag, das die Objekteigenschaft angibt, nach der Elemente gruppiert werden sollen. Es enthält auch ein <Label> Tag, das eine Zeichenfolge angibt, die als Beschriftung für jede Gruppe verwendet werden soll, oder ein <CustomControlName> Tag, das auf ein benutzerdefiniertes Steuerelement verweist, das an anderer Stelle mithilfe eines <Control> Tags definiert ist. Das <Control> Tag enthält ein <Name> Tag und ein <CustomControl> Tag.

TableControlTag

Das <TableControl> Tag enthält <TableHeaders> in der Regel Tags, <TableRowEntries> die die Formatierung für die Kopf- und Zeilen der Tabelle definieren. Das <TableHeaders> Tag enthält <TableColumnHeader> in der Regel Tags, die Tags enthalten <Label>, <Width>und <Alignment> Tags. Das <TableRowEntries> Tag enthält <TableRowEntry> Tags für jede Zeile in der Tabelle. Das <TableRowEntry> Tag enthält ein <TableColumnItems> Tag, das ein <TableColumnItem> Tag für jede Spalte in der Zeile enthält. In der Regel enthält das <TableColumnItem> Tag entweder ein <PropertyName> Tag, das die objekteigenschaft identifiziert, die an der definierten Position angezeigt werden soll, oder ein <ScriptBlock> Tag, das Skriptcode enthält, der ein Ergebnis berechnet, das an der Position angezeigt werden soll.

Hinweis

Skriptblöcke können auch an anderen Stellen verwendet werden, an denen berechnete Ergebnisse nützlich sein können.

Das <TableColumnItem> Tag kann auch ein <FormatString> Tag enthalten, das angibt, wie die Eigenschaft oder die berechneten Ergebnisse angezeigt werden.

ListControl-Tag

Das <ListControl> Tag enthält in der Regel ein <ListEntries> Tag. Das <ListEntries> Tag enthält ein <ListEntry> Tag. Das <ListEntry> Tag enthält ein <ListItems> Tag. Das <ListItems> Tag enthält <ListItem> Tags, die Tags enthalten <PropertyName> . Die <PropertyName> Tags geben die Objekteigenschaft an, die an der angegebenen Position in der Liste angezeigt werden soll. Wenn die Ansichtsauswahl mithilfe eines Auswahlsatzes definiert ist, können die <ListControl> Tags auch ein <EntrySelectedBy> Tag enthalten, das mindestens ein <TypeName> Tag <ListEntry> enthält. Diese <TypeName> Tags geben den Objekttyp an, den das <ListControl> Tag anzeigen soll.

WideControl-Tag

Das <WideControl> Tag enthält in der Regel ein <WideEntries> Tag. Das <WideEntries> Tag enthält ein oder mehrere <WideEntry> Tags. Ein <WideEntry> Tag enthält ein <WideItem> Tag.

Ein <WideItem> Tag muss entweder ein <PropertyName> Tag oder ein <ScriptBlock> Tag enthalten. Ein <PropertyName> Tag gibt die Eigenschaft an, die an der angegebenen Position in der Ansicht angezeigt werden soll. Ein <ScriptBlock> Tag gibt ein Skript an, das an der angegebenen Position in der Ansicht ausgewertet und angezeigt werden soll.

Ein <WideItem> Tag kann ein <FormatString> Tag enthalten, das angibt, wie die Eigenschaft angezeigt wird.

CustomControl-Tag

Mit dem <CustomControl> Tag können Sie einen Skriptblock verwenden, um ein Format zu definieren. Ein <CustomControl> Tag enthält in der Regel ein <CustomEntries> Tag, das mehrere <CustomEntry> Tags enthält. Jedes <CustomEntry> Tag enthält ein <CustomItem> Tag, das eine Vielzahl von Tags enthalten kann, die Inhalte und Formatierungen der angegebenen Position in der Ansicht angeben, einschließlich <Text>, , <Indentation>und <ExpressionBinding><NewLine> Tags.

Standardanzeige in Types.ps1xml

Die Standardanzeige einiger grundlegender Objekttypen wird in der Types.ps1xml Datei im $PSHOME Verzeichnis definiert. Die Knoten heißen PsStandardMembers, und die Unterknoten verwenden eines der folgenden Tags:

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

Weitere Informationen finden Sie unter about_Types.ps1xml.

Verwenden der Datei "Tracing Format.ps1xml"

Um Fehler beim Laden oder der Anwendung von Format.ps1xml Dateien zu erkennen, verwenden Sie das Trace-Command Cmdlet mit einer der folgenden Formatkomponenten als Wert des Name-Parameters :

  • FormatFileLoading
  • FormatViewBinding

Weitere Informationen finden Sie unter "Trace-Command " und "Get-TraceSource".

Signieren einer Format.ps1xml-Datei

Um die Benutzer Ihrer Format.ps1xml Datei zu schützen, signieren Sie die Datei mit einer digitalen Signatur. Weitere Informationen finden Sie unter about_Signing.

Beispiel-XML für eine benutzerdefinierte Formattabellenansicht

Im folgenden Beispiel wird eine Format-Table benutzerdefinierte Ansicht für die von Get-ChildItemsystem.IO.DirectoryInfo und System.IO.FileInfo erstellten Objekte erstellt. Die benutzerdefinierte Ansicht heißt "mygciview " und fügt der Tabelle die Spalte "CreationTime " hinzu.

Die benutzerdefinierte Ansicht wird aus einer bearbeiteten Version der FileSystem.Format.ps1xml Datei erstellt, die in $PSHOME PowerShell 5.1 gespeichert ist.

Verwenden Sie Update-FormatData nach dem Speichern der benutzerdefinierten .ps1xml Datei die Ansicht in eine PowerShell-Sitzung. In diesem Beispiel muss die benutzerdefinierte Ansicht das Tabellenformat verwenden, andernfalls Format-Table schlägt ein Fehler fehl.

Wird Format-Table mit dem Parameter View verwendet, um den Namen der benutzerdefinierten Ansicht anzugeben und die Ausgabe der Tabelle zu formatieren. Ein Beispiel für die Ausführung des Befehls finden Sie unter "Format-Table".

$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

Hinweis

Um das XML-Beispiel innerhalb von Einschränkungen für die Zeilenbreite anzupassen, war es erforderlich, einen Einzug zu komprimieren und Zeilenumbrüche innerhalb des Codes zu verwenden.

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

Weitere Informationen