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 :
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 :
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 :
Une barre de recherche permet de filtrer sur n’importe quel élément : nom du service, statut, état…
Filtrons sur le service Intune.
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.
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.
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
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 :
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
Ci-dessous la commande permettant de grouper les services sur la propriété type de démarrage :
get-service | Group-Object -Property StartType
Il est également possible de filtrer sur plusieurs propriétés.
Get-Service | Group-Object -Property Status,StartType