PowerShell & Scripting
PowerShell-Ausgabeformatierung
Overview
PowerShell trennt Daten und Darstellung. Cmdlets geben Objekte aus, das Formatierungssystem entscheidet erst am Ende, wie sie in der Konsole erscheinen. Ob ein Objekt als Tabelle oder Liste angezeigt wird und welche Eigenschaften zu sehen sind, legen Standardansichten fest. Seit PowerShell 6 stehen die Standardansichten im Quellcode, eigene Ansichten definierst Du in .format.ps1xml-Dateien.
Für die Anzeige gibt es Format-Table, Format-List, Format-Wide und Format-Custom. Für die Weiterverarbeitung gibt es Export-Csv, ConvertTo-Json, ConvertTo-Html, Export-Clixml und Out-File.
Der wichtigste Unterschied: Format-Cmdlets erzeugen Formatierungsobjekte, nicht die ursprünglichen Daten. Wer Format-Table vor Export-Csv setzt, exportiert unbrauchbare interne Objekte. Formatieren gehört deshalb immer ans Ende der Pipeline.
How it works
Werkzeuge im Überblick:
- Format-Table zeigt Eigenschaften als Spalten. -Property wählt und ordnet Spalten, -AutoSize passt Breiten an, -Wrap bricht lange Werte um, -GroupBy erzeugt Teiltabellen (Eingabe vorher sortieren).
- Berechnete Eigenschaften sind Hashtables mit Name bzw. Label und Expression, optional FormatString, Width und Alignment.
- Format-List zeigt jede Eigenschaft in einer eigenen Zeile, nützlich für Detailansichten einzelner Objekte.
- Eigene Ansichten: Get-FormatData | Export-FormatData erzeugt eine Vorlage, Update-FormatData -PrependPath lädt die angepasste Datei mit Vorrang vor den eingebauten Ansichten. Die Änderung gilt nur für die Sitzung, dauerhaft über Profil oder Modulmanifest.
- Für Exporte wählst Du die Eigenschaften mit Select-Object und übergibst die Objekte direkt an Export-Csv oder ConvertTo-Json.
Benefits
- Lesbare Konsolenausgabe: Berechnete Spalten zeigen z. B. Größen in GB statt Bytes
- Saubere Exporte: Objekte gehen ohne Umweg über Text in CSV oder JSON, Excel und andere Tools lesen sie direkt
- Eigene Standardansichten: Module zeigen ihre Objekte mit sinnvollen Spalten, ohne dass Nutzer Format-Table tippen müssen
- Trennung von Logik und Anzeige: Funktionen bleiben weiterverarbeitbar, weil sie Objekte statt formatierten Text liefern
Practical example
Ein Verlag mit 140 Mitarbeitenden erzeugt wöchentlich einen Bericht über Postfachgrößen. Das alte Skript endete mit Format-Table | Export-Csv, die CSV enthielt nur unlesbare Klassennamen. Der Admin ersetzt Format-Table durch Select-Object mit einer berechneten Spalte für die Größe in GB und exportiert das Ergebnis mit Export-Csv -Delimiter ';' für das deutsche Excel. Für die Konsole nutzt er weiterhin Format-Table am Ende.
Things to keep in mind
- Format-Cmdlets nie vor Export-Csv, ConvertTo-Json oder Where-Object setzen, sie liefern keine Daten mehr
- In Funktionen keine Format-Cmdlets verwenden, sonst kann der Aufrufer die Ausgabe nicht weiterverarbeiten
- Für deutsche Excel-Versionen bei Export-Csv das Semikolon als Trennzeichen oder -UseCulture verwenden
- .format.ps1xml-Dateien signieren, weil sie Scriptblocks enthalten können
Conclusion
Formatierung ist reine Darstellung und gehört an das Ende der Pipeline. Wer Daten weitergeben will, exportiert Objekte mit Select-Object und Export-Csv oder ConvertTo-Json.
Further reading
Related articles
Microsoft 365
Microsoft Purview | Automated application of sensitivity labels
Microsoft 365
Microsoft 365 Security Audit with PowerShell, Part 1: Identity and Access
Microsoft 365
M365 Organization Settings via PowerShell
Microsoft 365