Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Kurzbeschreibung
Ab PowerShell 6 werden die Standardansichten für Objekte im PowerShell-Quellcode definiert.
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
Ab PowerShell 6 werden die Standardansichten im PowerShell-Quellcode definiert. Die Format.ps1xml Dateien aus PowerShell 5.1 und früheren Versionen sind in PowerShell 6 und höheren Versionen nicht vorhanden.
Der PowerShell-Quellcode definiert 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.
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 zum Anpassen des Ausgabeformats für Hashtabellen verwendet werden.
Eine .ps1xml 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, verwendet Format-List die im Quellcode definierte Listenansicht, 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 benutzerdefinierten 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
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.
Verwenden Sie zum Erstellen einer Format.ps1xml-Datei zur Definition einer benutzerdefinierten Ansicht die Cmdlets Get-FormatData und Export-FormatData. Verwenden Sie einen Text-Editor, um die Datei zu bearbeiten. Die Datei kann in jedem Verzeichnis gespeichert werden, auf das PowerShell zugreifen kann, z. B. ein Unterverzeichnis von $HOME.
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 die Update-FormatData-, 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 in allen zukünftigen Sitzungen vorzunehmen, fügen Sie Ihrem PowerShell-Profil den Befehl Update-FormatData hinzu.
Beispiel: Hinzufügen von Kalenderdaten zu Kulturobjekten
In diesem Beispiel wird gezeigt, wie Sie die Formatierung der Kulturobjekte System.Globalization.CultureInfo ändern, die vom Cmdlet Get-Culture in der aktuellen PowerShell-Sitzung generiert wurden. Die Befehle im Beispiel fügen die Calendar-Eigenschaft zur Standardtabellenansichtsanzeige von Kulturobjekten hinzu.
Rufen Sie zunächst die Formatdaten aus der Quellcodedatei ab, und erstellen Sie eine Format.ps1xml Datei, die die aktuelle Ansicht der Kulturobjekte enthält.
New-Item -Path $HOME\Format -ItemType Directory -Force
Get-FormatData -TypeName System.Globalization.CultureInfo |
Export-FormatData -LiteralPath $HOME\Format\CultureInfo.Format.ps1xml
Öffnen Sie die CultureInfo.Format.ps1xml Datei in einem beliebigen XML- oder Text-Editor, z. B. Visual Studio Code. Der folgende XML-Code definiert die Ansichten des CultureInfo-Objekts.
Die CultureInfo.Format.ps1xml Datei sollte wie im folgenden Beispiel aussehen:
<?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>
Erstellen Sie eine neue Spalte für die Calendar-Eigenschaft, indem Sie einen neuen Satz von <TableColumnHeader> Tags hinzufügen. Der Wert der eigenschaft Calendar kann lang sein. Geben Sie also einen Wert von 45 Zeichen als <Width>an.
<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 hinzu, indem Sie die Tags <TableColumnItem> und <PropertyName verwenden:
<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. Verwenden Sie Update-FormatData, um der aktuellen PowerShell-Sitzung die neue Formatdatei hinzuzufügen.
In diesem Beispiel wird der parameter PrependPath 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 $HOME\Format\CultureInfo.Format.ps1xml
Um die Änderung zu testen, geben Sie Get-Culture ein, und überprüfen Sie die Ausgabe, 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>identifiziert den Namen der Ansicht. -
<ViewSelectedBy>gibt den Objekttyp oder die Typen an, auf den die Ansicht angewendet wird. -
<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. Sie enthält auch ein <Label>-Tag, das eine Zeichenfolge angibt, die als Bezeichnung 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 in der Regel <TableHeaders> und <TableRowEntries> Tags, die die Formatierung für die Kopf- und Zeilen der Tabelle definieren. Das <TableHeaders>-Tag enthält in der Regel <TableColumnHeader> Tags, die <Label>, <Width>und <Alignment> Tags enthalten. Das <TableRowEntries>-Tag enthält <TableRowEntry> Tags für jede Zeile in der Tabelle. Das <TableRowEntry> Tag enthält ein <TableColumnItems> Tag, das für jede Spalte in der Zeile ein <TableColumnItem> Tag 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.
Anmerkung
Scriptblocks 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 normalerweise 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 <PropertyName> Tags enthalten. 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 Tags <ListControl> und <ListEntry> auch ein <EntrySelectedBy>-Tag enthalten, das mindestens ein <TypeName>-Tag enthält. Diese <TypeName> Tags geben den Objekttyp an, den das <ListControl>-Tag anzeigen soll.
WideControl-Tag
Das <WideControl>-Tag enthält normalerweise 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 Scriptblock 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 Inhalt und Formatierung der angegebenen Position in der Ansicht angeben, einschließlich <Text>, <Indentation>, <ExpressionBinding>und <NewLine> Tags.
Verwenden der Datei "Tracing Format.ps1xml"
Um Fehler beim Laden oder der Anwendung von Format.ps1xml Dateien zu erkennen, verwenden Sie das Cmdlet Trace-Command mit einer der folgenden Formatkomponenten als Wert des parameters Name:
- 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 Format-Table benutzerdefinierte Ansicht
Im folgenden XML-Beispiel wird eine Format-Table benutzerdefinierte Ansicht für die System.IO.DirectoryInfo- und System.IO.FileInfo Objekte erstellt, die von Get-ChildItemerstellt wurden. Die benutzerdefinierte Ansicht heißt MyGciView- und fügt der Tabelle die CreationTime Spalte hinzu.
Verwenden Sie zum Erstellen der benutzerdefinierten Ansicht die Cmdlets Get-FormatData und Export-FormatData, um eine .ps1xml Datei zu generieren. Bearbeiten Sie dann Ihre .ps1xml-Datei, um den Code für Ihre benutzerdefinierte Ansicht zu erstellen. Die .ps1xml Datei kann in jedem Verzeichnis gespeichert werden, auf das PowerShell zugreifen kann. Zum Beispiel, ein Unterverzeichnis von $HOME.
Nachdem die .ps1xml Datei erstellt wurde, verwenden Sie das Cmdlet Update-FormatData, um die Ansicht in die aktuelle PowerShell-Sitzung einzuschließen. Oder fügen Sie den Aktualisierungsbefehl zu Ihrem PowerShell-Profil hinzu, wenn Sie die Ansicht in allen PowerShell-Sitzungen verfügbar haben möchten.
In diesem Beispiel muss die benutzerdefinierte Ansicht das Tabellenformat verwenden, andernfalls schlägt Format-Table fehl.
Verwenden Sie Format-Table mit dem Parameter View, um den Namen der benutzerdefinierten Ansicht, MyGciView-anzugeben und die Ausgabe der Tabelle mit der CreationTime Spalte zu formatieren. Ein Beispiel für die Ausführung des Befehls finden Sie unter Format-Table-.
Anmerkung
Obwohl Sie die Formatierungs-XML aus dem Quellcode abrufen können, um eine benutzerdefinierte Ansicht zu erstellen, ist möglicherweise eine weitere Entwicklung erforderlich, um das gewünschte Ergebnis zu erhalten.
Im folgenden Get-FormatData Befehl gibt es eine Alternative für den PowerShellVersion Parameter, um sicherzustellen, dass alle lokalen Formatierungsinformationen zurückgegeben werden. Verwenden Sie -PowerShellVersion $PSVersionTable.PSVersion anstelle einer bestimmten PowerShell-Version.
Get-FormatData -PowerShellVersion 5.1 -TypeName System.IO.DirectoryInfo |
Export-FormatData -LiteralPath $HOME\Format\MyGciView.Format.ps1xml
Update-FormatData -AppendPath $HOME\Format\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>