Geek School: apprendre à formater, filtrer et comparer dans PowerShell

Table des matières:

Geek School: apprendre à formater, filtrer et comparer dans PowerShell
Geek School: apprendre à formater, filtrer et comparer dans PowerShell

Vidéo: Geek School: apprendre à formater, filtrer et comparer dans PowerShell

Vidéo: Geek School: apprendre à formater, filtrer et comparer dans PowerShell
Vidéo: PowerShell Remoting - YouTube 2024, Avril
Anonim
Dans cette édition de Geek School, nous examinons le formatage, le filtrage et la comparaison des objets dans le pipeline.
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

Lorsque j'ai débuté avec 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 constatez que les objets ServiceController ont bien plus que ces trois propriétés. Que se passe-t-il?
Mais si vous dirigez Get-Service vers Get-Member, vous constatez que les objets ServiceController ont bien plus que ces trois propriétés. Que se passe-t-il?
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.
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.

notepad C:WindowsSystem32WindowsPowerShellv1.0DotNetTypes.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 constater 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 que vous utilisez n’a pas d’entrée dans ce fichier, ni dans aucun autre fichier de format? Eh bien, 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.
Soudain, vous pouvez constater 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 que vous utilisez n’a pas d’entrée dans ce fichier, ni dans aucun autre fichier de format? Eh bien, 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 cela, vous devez connaître trois cmdlets.

  • Liste de format
  • Format-Table
  • Format-large
Image
Image

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é de nom, 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-Wide

Comme vous pouvez le constater, la valeur par défaut de deux colonnes est également définie, bien que vous puissiez spécifier la propriété que vous souhaitez utiliser, ainsi que le nombre de colonnes que vous souhaitez afficher.
Comme vous pouvez le constater, la valeur par défaut de deux colonnes est également définie, 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 l'applet de commande Get-Process.
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 l'applet de commande Get-Process.
Image
Image

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 | Format-List

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.
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 souhaitez.
Alternativement, vous pouvez sélectionner uniquement les propriétés que vous souhaitez.

Get-Process | Format-List –Property name,id

Image
Image

Format-Table, D'autre part, prend des données et les transforme en une table. Puisque nos données provenant 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-Table name,id –AutoSize

Image
Image

Filtrage et comparaison

L'une des meilleures choses à propos de l'utilisation d'un pipeline d'objet 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 “Running”}

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 à Running. Il existe quelques opérateurs de comparaison que vous pouvez utiliser dans le bloc de script de filtrage:
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 à Running. 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. Toutefois, il faut un certain temps pour s’habituer à la syntaxe Where-Obeject. C'est tout pour cette fois!

Conseillé: