Utilisation des commandes de mise en forme pour modifier l’affichage d’une sortie

PowerShell dispose d’un ensemble d’applets de commande qui vous permettent de contrôler la façon dont les propriétés s’affichent pour certains objets. Le nom de toutes les applets de commande commence par Format. Vous pouvez sélectionner les propriétés que vous voulez afficher.

Get-Command -Verb Format -Module Microsoft.PowerShell.Utility
CommandType     Name               Version    Source
-----------     ----               -------    ------
Cmdlet          Format-Custom      6.1.0.0    Microsoft.PowerShell.Utility
Cmdlet          Format-Hex         6.1.0.0    Microsoft.PowerShell.Utility
Cmdlet          Format-List        6.1.0.0    Microsoft.PowerShell.Utility
Cmdlet          Format-Table       6.1.0.0    Microsoft.PowerShell.Utility
Cmdlet          Format-Wide        6.1.0.0    Microsoft.PowerShell.Utility

Cet article décrit les applets de commande Format-Wide, Format-List et Format-Table.

Dans PowerShell, chaque type d’objet possède des propriétés qui sont utilisées par défaut si vous ne sélectionnez pas celles qui doivent être affichées. Chaque applet de commande utilise le même paramètre Property pour spécifier les propriétés à afficher. Comme Format-Wide n’affiche qu’une seule propriété, son paramètre Property n’accepte qu’une seule valeur, mais les paramètres des propriétés de Format-List et Format-Table acceptent une liste de noms de propriétés.

Dans cet exemple, la sortie par défaut de l’applet de commande Get-Process montre qu’il y a deux instances d’Internet Explorer en cours d’exécution.

Get-Process -Name iexplore

Par défaut, les objets Process affichent les propriétés présentées ici :

 NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
     32    25.52      10.25      13.11   12808   1 iexplore
     52    11.46      26.46       3.55   21748   1 iexplore

Utilisation de l’applet de commande Format-Wide pour une sortie d’élément unique

Par défaut, l’applet de commande Format-Wide affiche uniquement la propriété par défaut d’un objet. Les informations associées à chaque objet s’affichent dans une seule colonne :

Get-Command -Verb Format | Format-Wide
Format-Custom          Format-Hex
Format-List            Format-Table
Format-Wide

Vous pouvez également spécifier une propriété autre que celle par défaut :

Get-Command -Verb Format | Format-Wide -Property Noun
Custom                 Hex
List                   Table
Wide

Contrôle de l’affichage de Format-Wide avec une colonne

La cmdlet Format-Wide ne permet d’afficher qu’une seule propriété à la fois. Cela s’avère utile pour afficher des listes volumineuses dans plusieurs colonnes.

Get-Command -Verb Format | Format-Wide -Property Noun -Column 3
Custom                 Hex                  List
Table                  Wide

Utilisation de l’applet de commande Format-List pour un Affichage Liste

L’applet de commande Format-List affiche un objet sous forme de liste, chaque propriété étant étiquetée et affichée sur une ligne distincte :

Get-Process -Name iexplore | Format-List
Id      : 12808
Handles : 578
CPU     : 13.140625
SI      : 1
Name    : iexplore

Id      : 21748
Handles : 641
CPU     : 3.59375
SI      : 1
Name    : iexplore

Vous pouvez spécifier autant de propriétés que vous le souhaitez :

Get-Process -Name iexplore | Format-List -Property ProcessName,FileVersion,StartTime,Id
ProcessName : iexplore
FileVersion : 11.00.18362.1 (WinBuild.160101.0800)
StartTime   : 10/22/2019 11:23:58 AM
Id          : 12808

ProcessName : iexplore
FileVersion : 11.00.18362.1 (WinBuild.160101.0800)
StartTime   : 10/22/2019 11:23:57 AM
Id          : 21748

Obtention d’informations détaillées en utilisant l’applet de commande Format-List avec des caractères génériques

L’applet de commande Format-List permet d’utiliser un caractère générique comme valeur de son paramètre Property. Cela permet d’afficher des informations détaillées. Souvent, les objets contiennent plus d’informations qu’il n’en faut. C’est pourquoi, par défaut, PowerShell n’affiche pas les valeurs de toutes les propriétés. Pour afficher toutes les propriétés d’un objet, utilisez la commande Format-List -Property *. La commande suivante génère plus de 60 lignes de sortie pour un seul processus :

Get-Process -Name iexplore | Format-List -Property *

Bien que la commande Format-List soit utile pour afficher des détails, si vous voulez obtenir une vue d’ensemble d’une sortie qui comporte un grand nombre d’éléments, une simple vue tabulaire est souvent plus utile.

Utilisation de l’applet de commande Format-Table pour une sortie tabulaire

Si vous utilisez l’applet de commande Format-Table sans spécifier de noms de propriétés pour mettre en forme la sortie de la commande Get-Process, vous obtenez exactement la même sortie que si vous n’utilisiez pas d’applet de commande Format. Par défaut, PowerShell affiche les objets Process dans un format tabulaire.

Get-Service -Name win* | Format-Table
Status   Name               DisplayName
------   ----               -----------
Running  WinDefend          Windows Defender Antivirus Service
Running  WinHttpAutoProx... WinHTTP Web Proxy Auto-Discovery Se...
Running  Winmgmt            Windows Management Instrumentation
Running  WinRM              Windows Remote Management (WS-Manag...

Notes

Get-Service est disponible uniquement sur les plateformes Windows.

Amélioration de la sortie de l’applet de commande Format-Table

Bien qu’une vue tabulaire soit utile pour afficher beaucoup d’informations, elle peut être difficile à interpréter si l’affichage est trop étroit pour les données. Dans l’exemple précédent, la sortie est tronquée. Si vous spécifiez le paramètre AutoSize quand vous exécutez la commande Format-Table, PowerShell calcule les largeurs des colonnes en fonction des données réelles affichées. Les colonnes deviennent ainsi lisibles.

Get-Service -Name win* | Format-Table -AutoSize
Status  Name                DisplayName
------  ----                -----------
Running WinDefend           Windows Defender Antivirus Service
Running WinHttpAutoProxySvc WinHTTP Web Proxy Auto-Discovery Service
Running Winmgmt             Windows Management Instrumentation
Running WinRM               Windows Remote Management (WS-Management)

L’applet de commande Format-Table peut continuer de tronquer des données, mais cela ne se produit qu’à la fin de l’écran. Les propriétés, à l’exception de la dernière affichée, disposent de la taille nécessaire pour que leur élément de données le plus long s’affiche correctement.

Get-Service -Name win* |
    Format-Table -Property Name, Status, StartType, DisplayName, DependentServices -AutoSize
Name                 Status StartType DisplayName                               DependentServi
                                                                                ces
----                 ------ --------- -----------                               --------------
WinDefend           Running Automatic Windows Defender Antivirus Service        {}
WinHttpAutoProxySvc Running    Manual WinHTTP Web Proxy Auto-Discovery Service  {NcaSvc, iphl…
Winmgmt             Running Automatic Windows Management Instrumentation        {vmms, TPHKLO…
WinRM               Running Automatic Windows Remote Management (WS-Management) {}

La commande Format-Table part du principe que les propriétés sont listées par ordre d’importance. La cmdlet tente donc d’afficher entièrement les propriétés les plus proches du début. Si la commande Format-Table ne peut pas afficher toutes les propriétés, elle supprime certaines colonnes de l’affichage. Vous pouvez observer ce comportement dans l’exemple précédent de la propriété DependentServices.

Retour automatique à la ligne de la sortie de l’applet de commande Format-Table dans les colonnes

Vous pouvez forcer le retour automatique à la ligne des données Format-Table retournées en nombre dans leur colonne d’affichage en utilisant le paramètre Wrap. L’utilisation du paramètre Wrap ne produit pas nécessairement le résultat escomptés, car si vous ne spécifiez pas AutoSize, les paramètres par défaut sont utilisés :

Get-Service -Name win* |
    Format-Table -Property Name, Status, StartType, DisplayName, DependentServices -Wrap
Name                 Status StartType DisplayName                               DependentServi
                                                                                ces
----                 ------ --------- -----------                               --------------
WinDefend           Running Automatic Windows Defender Antivirus Service        {}
WinHttpAutoProxySvc Running    Manual WinHTTP Web Proxy Auto-Discovery Service  {NcaSvc,
                                                                                iphlpsvc}
Winmgmt             Running Automatic Windows Management Instrumentation        {vmms,
                                                                                TPHKLOAD,
                                                                                SUService,
                                                                                smstsmgr…}
WinRM               Running Automatic Windows Remote Management (WS-Management) {}

L’utilisation du paramètre Wrap par lui-même ne ralentit considérablement le traitement. Cependant, si vous voulez mettre en forme une liste récursive de fichiers d’une structure d’annuaire volumineuse en utilisant le paramètre AutoSize, celui-ci tardera à afficher les premiers éléments de sortie et mobilisera beaucoup de mémoire.

Si vous n’êtes pas préoccupé par la charge du système, AutoSize fonctionne bien avec le paramètre Wrap. Les premières colonnes continuent d’utiliser la largeur nécessaire à l’affichage des éléments sur une même ligne, mais la colonne finale est réduite, si nécessaire.

Notes

Il se peut que certaines colonnes ne s’affichent pas si vous spécifiez les colonnes les plus larges en premier. Pour de meilleurs résultats, spécifiez les éléments de données les plus petits en premier.

Dans l’exemple suivant, les propriétés les plus larges sont spécifiées en premier.

Get-Process -Name iexplore |
    Format-Table -Wrap -AutoSize -Property FileVersion, Path, Name, Id

Même avec le retour automatique à la ligne, la dernière colonne Id est omise :

FileVersion                          Path                                                  Nam
                                                                                           e
-----------                          ----                                                  ---
11.00.18362.1 (WinBuild.160101.0800) C:\Program Files (x86)\Internet Explorer\IEXPLORE.EXE iex
                                                                                           plo
                                                                                           re
11.00.18362.1 (WinBuild.160101.0800) C:\Program Files\Internet Explorer\iexplore.exe       iex
                                                                                           plo
                                                                                           re

Organisation de la sortie de table

Un autre paramètre utile pour le contrôle de la sortie tabulaire est GroupBy. Des listes tabulaires plus longues en particulier peuvent être difficiles à comparer. Le paramètre GroupBy groupe la sortie en fonction d’une valeur de propriété. Par exemple, nous pouvons grouper les services en fonction du paramètre StartType pour faciliter l’inspection, en omettant la valeur de StartType de la liste des propriétés :

Get-Service -Name win* | Sort-Object StartType | Format-Table -GroupBy StartType
   StartType: Automatic
Status   Name               DisplayName
------   ----               -----------
Running  WinDefend          Windows Defender Antivirus Service
Running  Winmgmt            Windows Management Instrumentation
Running  WinRM              Windows Remote Management (WS-Managem…

   StartType: Manual
Status   Name               DisplayName
------   ----               -----------
Running  WinHttpAutoProxyS… WinHTTP Web Proxy Auto-Discovery Serv…