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