Imaginons que nous gérions une bibliothèque ouvert 7j/7 24h/24 (oui j’avais pas envie de filtrer les données…).

Les membres doivent scanner leur carte à leur arrivée, du coup nous récupérons ces données historisant les accès des deux derniers mois:

Dans cette extraction on récupère le prénom (FirstName), le nom (LastName), l’identifiant du membre et la date et l’heure du scan de leur carte.

Nous voulons compter combien de fois les gens sont venus et on veut faire ça en Powershell.

Étant donné que chaque membre a un Id, c’est très simple, on va compter le nombre de fois que l’id est présent dans la liste (ici les données sont dans la variable $data):

PS:\> $data | Group-Object -Property Id
Count Name                      Group
----- ----                      -----
    7 336699                    {@{FirstName=Jean; LastName=Dupont; Id=336699; Scan=2020-06-01 13:08:22Z}, @{FirstName=Jean; LastN...
    7 786241                    {@{FirstName=Gontrand; LastName=Gloup; Id=786241; Scan=2020-06-01 20:25:38Z}, @{FirstName=Gontrand...
    7 556574                    {@{FirstName=Raimond; LastName=Bause; Id=556574; Scan=2020-06-04 01:26:18Z}, @{FirstName=Raimond; ...
    7 686541                    {@{FirstName=Mireille; LastName=Mailleux; Id=686541; Scan=2020-06-06 05:27:53Z}, @{FirstName=Mirei...
    7 452089                    {@{FirstName=Martine; LastName=Spirou; Id=452089; Scan=2020-06-06 08:56:22Z}, @{FirstName=Martine;...

Pas très sexy, j’en conviens. Mais le champ “count” nous informe que chaque personne s’est présenté 7 fois, ce qui est correct.

Oui mais voilà vous voulez faire un joli tableau qui comprend :

  • FirstName
  • LastName
  • Id
  • Count

Et bien c’est facile mais un peu moins quand même sinon ce n’est drôle…

Ce qu’il faut comprendre c’est que pour accéder à FirstName, LastName et Id (qui est aussi présent dans Name dû au résultat du group-object), c’est qu’on doit accéder au contenu de Group:

PS:\>  $Data | Group-Object -Property Id | Select-Object -ExpandProperty Group | Select-Object FirstName, LastName, Id, Count -Unique

FirstName LastName Id     Count
--------- -------- --     -----
Jean      Dupont   336699     7
Gontrand  Gloup    786241     7
Raimond   Bause    556574     7
Mireille  Mailleux 686541     7
Martine   Spirou   452089     7

Donc ici on ouvre “Group” avec un Select-Object -ExpandProperty puis on récupère son contenu pour l’afficher.

Vous remarquerez le “-Unique” sur le dernier Select, c’est pour éviter les doublons, sans ça, vous auriez une ligne pour chaque occurrence.

Une petite dernière pour le fin, ne compter que les accès en Juin:

PS:/> $Data | Where-Object -FilterScript {(Get-Date $_.Scan).Month -eq 6} | Group-Object Id

Count Name                      Group
----- ----                      -----
    6 336699                    {@{FirstName=Jean; LastName=Dupont; Id=336699; Scan=2020-06-01 13:08:22Z; Count=7}, @{FirstName=Je...
    4 786241                    {@{FirstName=Gontrand; LastName=Gloup; Id=786241; Scan=2020-06-01 20:25:38Z; Count=7}, @{FirstName...
    2 556574                    {@{FirstName=Raimond; LastName=Bause; Id=556574; Scan=2020-06-04 01:26:18Z; Count=7}, @{FirstName=...
    2 686541                    {@{FirstName=Mireille; LastName=Mailleux; Id=686541; Scan=2020-06-06 05:27:53Z; Count=7}, @{FirstN...
    4 452089                    {@{FirstName=Martine; LastName=Spirou; Id=452089; Scan=2020-06-06 08:56:22Z; Count=7}, @{FirstName...

0 commentaire

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *