Geek School Learning Formater, filtrer et comparer dans PowerShell
Dans cette édition de Geek School, nous examinons le formatage, le filtrage et la comparaison des objets dans le pipeline..
Assurez-vous de lire les articles précédents de la série:
- Apprenez à automatiser Windows avec PowerShell
- Apprendre à utiliser les cmdlets dans PowerShell
- Apprendre à utiliser des objets dans PowerShell
Et restez à l'écoute pour le reste de la série toute la semaine.
Formatage par défaut
Quand j'ai commencé à utiliser PowerShell, je pensais que tout était magique, mais la vérité est qu'il faut un peu de temps pour comprendre ce qui se passe sous le capot. Il en va de même pour le système de formatage PowerShell. En fait, si vous exécutez la cmdlet Get-Service, la sortie générée ne vous montre que 3 propriétés: Status, Name et DisplayName..
Mais si vous dirigez Get-Service vers Get-Member, vous voyez que les objets ServiceController ont beaucoup plus que ces trois propriétés, alors ce qui se passe?
La réponse se trouve dans un fichier caché qui définit comment la plupart des applets de commande intégrées affichent leur sortie. Pour comprendre, tapez ce qui suit dans le shell et appuyez sur Entrée.
Bloc-notes C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ DotNetTypes.format.ps1xml
Si nous utilisons la fonction Find du bloc-notes, nous pouvons rapidement passer à la section qui détaille la sortie de la cmdlet Get-Service en recherchant le type ServiceController..
Soudain, vous pouvez voir que PowerShell met en forme, sous le capot, tous les objets du type ServiceController du pipeline et crée un tableau à trois colonnes: Status, Name et DisplayName. Mais que se passe-t-il si le type avec lequel vous faites affaire n'a pas d'entrée dans ce fichier, ni dans aucun autre fichier de format? Bien alors, c'est assez simple en fait. Si l'objet sortant du pipeline a 5 propriétés ou plus, PowerShell affiche toutes les propriétés de l'objet dans une liste. s'il a moins de 5 propriétés, il les affiche dans un tableau.
Formater vos données
Si vous n'êtes pas satisfait du formatage par défaut d'un objet ou d'un type, vous pouvez lancer votre propre formatage. Pour ce faire, vous devez connaître trois cmdlets..
- Liste de format
- Format-Table
- Format-large
Format-large prend simplement une collection d'objets et affiche une propriété unique de chaque objet. Par défaut, il cherchera une propriété de nom; si vos objets ne contiennent pas de propriété name, il utilisera la première propriété de l'objet une fois que les propriétés ont été triées par ordre alphabétique..
Get-Service | Format-large
Comme vous pouvez le constater, la valeur par défaut est également deux colonnes, bien que vous puissiez spécifier la propriété que vous souhaitez utiliser, ainsi que le nombre de colonnes que vous souhaitez afficher..
Get-Service | Format-Wide -Property DisplayName -Column 6
Si un élément est mis en forme sous forme de tableau par défaut, vous pouvez toujours le basculer en affichage sous forme de liste à l'aide de la cmdlet Format-List. Jetons un coup d'œil à la sortie de la cmdlet Get-Process.
Cette vue tabulaire convient très bien à ce type d’informations, mais supposons que nous voulons la visualiser sous forme de liste. Tout ce que nous avons à faire est de le diriger vers Liste de format.
Get-Process | Liste de format
Comme vous pouvez le constater, quatre éléments seulement sont affichés dans la liste par défaut. Pour afficher toutes les propriétés de l'objet, vous pouvez utiliser un caractère générique..
Get-Process | Format-List -Property *
Alternativement, vous pouvez sélectionner uniquement les propriétés que vous voulez.
Get-Process | Format-List-Nom de propriété, id
Format-Table, Par contre, prend les données et les transforme en table. Comme nos données de Get-Process se présentent déjà sous la forme d’une table, nous pouvons l’utiliser pour choisir facilement les propriétés que nous souhaitons afficher dans la table. J'ai utilisé le paramètre AutoSize pour que toutes les données tiennent sur un seul écran.
Get-Process | Format-Nom de la table, id -AutoSize
Filtrer et comparer
L'un des avantages de l'utilisation d'un pipeline d'objets est que vous pouvez filtrer des objets hors du pipeline à tout moment à l'aide de la cmdlet Where-Object..
Get-Service | Where-Object $ _. Status -eq “En cours d'exécution”
Utiliser where est vraiment très simple. $ _ représente l'objet de pipeline en cours, à partir duquel vous pouvez choisir une propriété sur laquelle vous souhaitez filtrer. Ici, ils ne conservent que des objets pour lesquels la propriété Status est égale à En cours d'exécution. Il existe quelques opérateurs de comparaison que vous pouvez utiliser dans le bloc de script de filtrage:
- eq (égal à)
- neq (différent de)
- gt (supérieur à)
- ge (Supérieur ou égal à)
- lt (moins que)
- le (inférieur ou égal à)
- comme (Wildcard String Match)
Une liste complète et davantage d’informations peuvent être consultées dans le fichier d’aide conceptuel about_comparison, mais il faut un certain temps pour s’habituer à la syntaxe Where-Obeject. C'est tout pour cette fois!