Programmation PowerShell/Formatage de l'affichage
C'est en train de devenir intéressant
Un point sur les données dans PowerShell
[modifier | modifier le wikicode]Retenez bien que PowerShell est un shell objet. En bref, là ou les anciens shell manipulent des chaines de caractères, PowerShell manipule des objets du framework .NET
Formatage de l'affichage
[modifier | modifier le wikicode]Les objets manipulés par PowerShell ont une méthode ToString() qui se charge de noter la description ou la valeur de l'objet au format de chaînes de caractères. Cette méthode est parfois appelée automatiquement par PowerShell mais vous pouvez l'appeler explicitement aussi ! Prenons 12 qui est une valeur typée entier :
12 | get-member
En exécutant l'instruction ci-dessus, vous constatez qu'il est écrit TypeName : System.Int32
Ci-dessous, une commandlette pour afficher dans la console la valeur
Write-Host 12
Automatiquement, PowerShell fait ceci :
Write-Host (12).ToString()
Les types d'objet définissent un formatage par défaut et vous pouvez le constater avec une date :
# différents formats par défaut ... Get-Date Write-Host (Get-Date).ToString()
Lorsque vous en aurez besoin, sachez simplement que vous pouvez modifier cela. Voici un exemple pour la date :
Write-Host (Get-Date).ToString("d MMMM yyyy")
La notion du type des données peut être déroutante lorsque vous débutez. Utilisez abusivement Get-Member pour identifier le type de données renvoyé par PowerShell !
Important
[modifier | modifier le wikicode]Dans la mesure du possible, travaillez avec des objets et non avec des chaines de caractères !
C'est la notion principale à retenir : avec PowerShell, on agit sur des objets du framework .NET et pas uniquement sur du texte comme les anciens shells !
Formatage de nombreuses données
[modifier | modifier le wikicode]Cela devient important lorsque vous traitez des listes par exemple avec
Get-Process
La commandlette ci-dessus renvoie une collection de zéro à beaucoup d'éléments typés System.Diagnostics.Process.
Vous pouvez l'afficher en version texte avec la commandlette suivante :
Get-Process | Format-Table -Property ProcessName, StartTime
La commandlette Format-Table renvoie des données formatées ! Elles n'ont plus leur type d'origine et donc, vous ne pouvez plus travailler les objets par la suite car la date StartTime est une chaîne de caractère suite au traitement de formatage. En résumé, les commandes de formatage sont à appliquer en fin de traitement.
Vous pouvez créer vos propres colonnes, etc. Mais je vous conseille d'ignorer tout cela car le but de PowerShell est de traiter les données et non du texte, vos fonctions et vos scripts devront renvoyer des objets et non du texte.