6. Automatisation des actions de masse

Importer une liste existante et traiter des données “en masse” de façon contrôlée.
Objectifs
  • Utiliser un fichier fourni comme “source de vérité” (aucune création / remplissage de fichier ici)
  • Importer des données, filtrer, transformer, produire un résultat exploitable
  • Comprendre la logique “liste d’entrées → traitement → sortie”
Ressource

Télécharger le fichier de l’activité

Téléchargez le fichier et placez-le dans le dossier ressources du cours. Pour ce chapitre, nous utilisons prioritairement la version CSV afin d’importer facilement les données en PowerShell.

Aide

Commandes utiles (définitions brèves)

Chemins

  • Test-Path Vérifie qu’un fichier existe avant de l’importer. Exemple : Test-Path ".\ressources\ex-006.csv"
  • Get-Location Affiche le dossier courant (utile pour les chemins relatifs).

Import & sélection

  • Import-Csv Importe un CSV et renvoie des objets (colonnes = propriétés). Exemple : $rows = Import-Csv file.csv
  • Select-Object Garde certaines colonnes. Exemple : Select-Object NOM, AGENCE
  • Where-Object Filtre une liste. Exemple : Where-Object {$_.AGENCE -eq "PARIS"}

Traitement de masse

  • foreach Applique une action à chaque ligne importée.
  • [pscustomobject] Construit une “sortie structurée” (mini-rapport).
  • Sort-Object Trie des résultats. Exemple : Sort-Object "SALAIRE ACTUEL" -Descending
  • Measure-Object Calcule moyenne/somme/min/max. Exemple : Measure-Object -Property "SALAIRE ACTUEL" -Average
Cas simple

Importer le fichier et produire un mini-rapport (traitement de masse)

On importe la liste des employés, puis on produit un résultat “exploitation” : compter, filtrer, trier, et construire une sortie structurée.

Étape 1 — Importer le CSV (avec contrôle du chemin)

# Chemin (relatif si le script est lancé depuis le dossier partie2)
		$csvPath = ".\ressources\ex-006.csv"

		if (-not (Test-Path $csvPath)) {
		  Write-Output "Fichier introuvable : $csvPath"
		  Write-Output "Vérifiez votre dossier courant avec Get-Location"
		  return
		}

		$rows = Import-Csv -Path $csvPath
		Write-Output "Lignes importées : $($rows.Count)"

Explication des commandes utilisées

  • $csvPath : stocke le chemin du fichier à importer.
  • Test-Path : vérifie que le fichier existe (évite un script qui “crashe”).
  • Write-Output : affiche un message clair.
  • return : arrête le script proprement si le fichier n’existe pas.
  • Import-Csv : transforme le fichier en objets PowerShell.
  • $rows.Count : nombre de lignes importées.

Étape 2 — Traitement de masse : filtre + tri + sortie structurée

# Exemple : les 5 salaires les plus élevés (tous sites confondus)
		$top5 = $rows |
		  Sort-Object "SALAIRE ACTUEL" -Descending |
		  Select-Object -First 5 NOM, AGENCE, FONCTION, "SALAIRE ACTUEL"

		$top5

		# Exemple : moyenne des salaires
		$avg = $rows | Measure-Object -Property "SALAIRE ACTUEL" -Average
		Write-Output ("Salaire moyen : {0:N2}" -f $avg.Average)

Explication des commandes utilisées

  • Sort-Object : trie les lignes selon la colonne (ici salaire décroissant).
  • Select-Object : sélectionne certaines colonnes et limite à 5 lignes.
  • Measure-Object -Average : calcule une moyenne sur une colonne numérique.
  • -f : formate l’affichage (2 décimales).
Important : on ne crée aucun fichier ici. On importe une ressource fournie et on traite les données en mémoire.
Exercices

3 exercices guidés (liés au fichier)

Corrigés masqués : l’élève doit produire une solution avant d’ouvrir.

Exercice 1 — Filtrer PARIS et lister les employés

Importez le CSV puis affichez uniquement les employés dont l’AGENCE est PARIS. Affichez les colonnes : NOM, FONCTION, SALAIRE ACTUEL.

  • Étape 1 : Import-Csv
  • Étape 2 : filtre avec Where-Object
  • Étape 3 : Select-Object
Voir un corrigé possible
$csvPath = ".\ressources\ex-006.csv"
				$rows = Import-Csv -Path $csvPath

				$paris = $rows | Where-Object { $_.AGENCE -eq "PARIS" } |
				  Select-Object NOM, FONCTION, "SALAIRE ACTUEL"

				$paris

Exercice 2 — Compter par agence (traitement de masse)

Produisez un mini-rapport indiquant le nombre d’employés par AGENCE. Astuce : utilisez Group-Object.

  • Importer
  • Grouper par agence
  • Afficher un résultat lisible (Name + Count)
Voir un corrigé possible
$csvPath = ".\ressources\ex-006.csv"
				$rows = Import-Csv -Path $csvPath

				$rows | Group-Object AGENCE | Select-Object Name, Count

Exercice 3 — “Traitement de masse” : calculer une prime

Pour chaque employé, calculez une prime :

  • si ANCIENNETE ≥ 5 : prime = 5% du salaire
  • sinon : prime = 2% du salaire
Produisez une sortie structurée (tableau d’objets) avec : NOM, AGENCE, SALAIRE ACTUEL, PRIME.

  • Importer
  • foreach
  • if/else
  • [pscustomobject]
Voir un corrigé possible
$csvPath = ".\ressources\ex-006.csv"
				$rows = Import-Csv -Path $csvPath

				$res = @()

				foreach ($r in $rows) {
				  $salary = [double]$r."SALAIRE ACTUEL"
				  $anc = [int]$r.ANCIENNETE

				  if ($anc -ge 5) {
					$prime = $salary * 0.05
				  } else {
					$prime = $salary * 0.02
				  }

				  $res += [pscustomobject]@{
					NOM = $r.NOM
					AGENCE = $r.AGENCE
					"SALAIRE ACTUEL" = $salary
					PRIME = [math]::Round($prime, 2)
				  }
				}

				$res | Select-Object -First 10
Conseil : si un nom de colonne contient des espaces ou accents, utilisez des guillemets : $r."SALAIRE ACTUEL".
Quiz

Auto-évaluation — Actions de masse & Import

Q1 — Import-Csv renvoie :

Q2 — Test-Path sert à :

Q3 — Un traitement de masse consiste généralement à :

Q4 — Pour accéder à une colonne avec espace (ex: “SALAIRE ACTUEL”), on peut écrire :

Aller au chapitre suivant