Blog ENI : Toute la veille numérique !
🎁 Jusqu'au 31/12, recevez notre
offre d'abonnement à la Bibliothèque Numérique. Cliquez ici
🎁 Jusqu'au 31/12, recevez notre
offre d'abonnement à la Bibliothèque Numérique. Cliquez ici

Mise en forme de la sortie des objets

Qu’est-ce que la mise en forme des objets ?

La mise en forme d’un objet correspond à la façon dont celui-ci est affiché à l’utilisateur dans la console.

Dans ce chapitre, nous allons tout d’abord étudier comment fonctionne la mise en forme standard dans PowerShell pour ensuite étudier les différentes manières de modifier cette mise en forme : tableau interactif, tableau, liste…

Pour comprendre comment utiliser ces méthodes de formatage, il est intéressant de vérifier les différentes cmdlets dont le nom contient le terme « format ».

Get-Command -Verb Format 

Ci-dessous le résultat :

images/27RI01.png

Pour n’afficher que les cmdlets dont nous avons besoin, il est possible de filtrer sur le module PowerShell.Utility.

Get-Command -Verb Format -Module Microsoft.PowerShell.Utility 

Pour rappel, chaque cmdlet utilise un module et une bibliothèque bien précis. Pour en savoir davantage, consultez le chapitre PowerShell, un langage de cmdlets.

Mise en forme basique

Lorsqu’une commande est exécutée dans la console PowerShell, le résultat sera affiché en utilisant une mise en forme précise et spécifique.

Cette mise en forme est gérée par des fichiers de mise en forme disponibles dans le répertoire courant de Microsoft, logiquement disponible dans C:\Windows\System32\WindowsPowerShell\v1.0.

Ce chemin peut être récupéré en utilisant la variable suivante :

$pshome 

Il s’agit de fichiers au format .ps1xml dont nous avons un aperçu ci-dessous :

images/27RI02.png

S’agissant de fichiers de format, chacun de ces fichiers contient le terme « format » dans son nom.

Il est donc possible avec PowerShell de les lister facilement.

PS C:\Users\damien.vanrobaeys> get-childitem $pshome | where  
{$_.name -like "*format*"} | select name 
 
Name 
---- 
Certificate.format.ps1xml 
Diagnostics.Format.ps1xml 
DotNetTypes.format.ps1xml 
Event.Format.ps1xml 
FileSystem.format.ps1xml 
Help.format.ps1xml 
HelpV3.format.ps1xml 
PowerShellCore.format.ps1xml 
PowerShellTrace.format.ps1xml 
Registry.format.ps1xml 
WSMan.Format.ps1xml 

Ci-dessous ce que gèrent ces fichiers de mises en forme :

  • Certificate.Format.ps1xml : gère la mise en forme dans le magasin de certificats.

  • DotNetTypes.Format.ps1xml :...

Out-GridView : un tableau interactif et puissant

Il peut parfois être utile de sortir une liste de données sous la forme d’un tableau maniable très facilement, un peu comme avec Excel.

Une cmdlet native de PowerShell permet de faire cela. Il s’agit de la cmdlet Out-GriView. Cette cmdlet est disponible dans le module Microsoft. PowerShell.Utility et dans la bibliothèque suivante :

PS C:\Users\damien.vanrobaeys> (get-command out-gridview).dll 
C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Microsoft.PowerShell 
.Commands.Utility\v4.0_3.0.0.0__31bf3856ad364e35\Microsoft 
.PowerShell.Commands.Utility.dll 

Son utilisation est très simple, il suffit d’ajouter un caractère pipe | à votre commande puis d’y ajouter la cmdlet Out-GridView.

Nous allons sortir la liste des services en utilisant ce tableau :

Get-Service | Out-GridView 

Ci-dessous une partie du résultat obtenu :

images/27RI03.png

Une barre de recherche permet de filtrer sur n’importe quel élément : nom du service, statut, état…

Filtrons sur le service Intune.

images/27RI04.png

Il est également possible de choisir les colonnes à afficher ou masquer en faisant un clic droit sur le titre des colonnes puis Sélectionner des colonnes.

images/27RI05.png

Notre exemple n’est pas très parlant car il n’y a que trois colonnes disponibles.

Nous allons faire de même avec la cmdlet Get-Process.

images/27RI06.png

Cette...

Format-Table : mise en forme dans un tableau

1. Affichage par défaut

Comme mentionné dans le chapitre PowerShell, un langage de cmdlets, un des intérêts de la syntaxe des cmdlets est qu’il est possible de comprendre facilement ce que font ces dernières. Ainsi, la syntaxe de la cmdlet Format-Table permet de comprendre rapidement que son utilité est de formater quelque chose sous la forme d’un tableau.

Ce quelque chose sera ici un objet. Cette cmdlet est disponible dans le module PowerShell.Commands.Utility et la DLL portant le même nom.

Reprenons notre exemple sur la liste des services et ajoutons-lui la cmdlet Format-table.

PS C:\Users\damien.vanrobaeys> get-service | format-table 
 
Status   Name               DisplayName 
------   ----               ----------- 
Stopped  AarSvc_f5d53       Agent Activation Runtime_f5d53 
Running  AESMService        Intel® SGX AESM 
Stopped  AJRouter           AllJoyn Router Service 
Stopped  ALG                Application Layer Gateway Service 
Running  AppIDSvc           Application Identity 
Running  Appinfo            Application Information 
Stopped  AppMgmt            Application Management 
Stopped  AppReadiness       App Readiness 
Stopped  AppVClient         Microsoft App-V Client 
Running  AppXSvc            AppX Deployment Service (AppXSVC) 
Stopped  AssignedAccessM... AssignedAccessManager Service 
Running  AudioEndpointBu... Windows...

Format-List : affichage sous forme d’une liste

La cmdlet Format-List permettra d’afficher la sortie d’un objet sous la forme d’une liste de propriétés.

Get-Service | Format-List 
images/27RI08.png

Pour choisir les propriétés à afficher, il faudra ajouter le paramètre -Property.

Get-Service | Format-List -Property Name, Status 

ou -Property * pour tout afficher :

Get-Service | Format-List -Property * 

Sort-Object : trier la liste en fonction d’une propriété

La cmdlet Sort-Object permet de mettre en forme la sortie d’un objet en triant selon une propriété particulière, c’est-à-dire dans l’ordre de cette propriété.

Dans l’exemple suivant, nous listerons et trierons les services sur la propriété Status, ce qui permettra donc de classer la liste des services par statut de services :

  • Stopped

  • Running

Ci-dessous le résultat :

images/27RI09.png

Group-Object : grouper les objets par propriété

Cette cmdlet permet de mettre en forme la sortie des objets en groupe d’objets. Chaque groupe correspond à une propriété qui a la même valeur, par exemple les services qui ont tous le statut Running ou Stopped.

Ci-dessous la commande permettant de grouper les services sur la propriété Status :

get-service | Group-Object -Property Status 
images/27RI10.png

Ci-dessous la commande permettant de grouper les services sur la propriété type de démarrage :

get-service | Group-Object -Property StartType 
images/27RI11.png

Il est également possible de filtrer sur plusieurs propriétés.

Get-Service | Group-Object -Property Status,StartType 
images/27RI12.png