6. Automatisation des actions de masse
- 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”
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.
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
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).
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
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
$r."SALAIRE ACTUEL".