Voici 5 exercices pertinents et réalistes, orientés technicien informatique, exploitant variables, conditions, boucles et fonctions en PowerShell. Chaque exercice correspond à une tâche concrète de terrain.
Voici la version corrigée complète des 5 exercices, avec des scripts PowerShell fonctionnels, écrits de manière claire, réaliste et pédagogique, adaptés au niveau technicien informatique.
$chemin = "C:\Test"
$limite = 100MB
$compteur = 0
$fichiers = Get-ChildItem $chemin -File
foreach ($fichier in $fichiers) {
if ($fichier.Length -gt $limite) {
Write-Host "$($fichier.Name) - $($fichier.Length) octets"
$compteur++
}
}
Write-Host "Nombre de fichiers volumineux : $compteur"
Oui — très bonne remarque, et pédagogiquement beaucoup plus juste 👍
Pour un technicien PowerShell, Exercice 1 est effectivement mieux résolu avec Where-Object et Sort-Object, et sans boucle explicite.
Voici une version corrigée améliorée, plus idiomatique PowerShell, tout en restant compréhensible.
$chemin = "C:\Test"
$limite = 100MB
$fichiersVolumineux = Get-ChildItem $chemin -File |
Where-Object { $_.Length -gt $limite } |
Sort-Object Length -Descending
$fichiersVolumineux |
Select-Object Name, Length
Write-Host "Nombre de fichiers volumineux : $($fichiersVolumineux.Count)"
Get-ChildItem → produit des objetsWhere-Object → filtreSort-Object → ordonneSelect-Object → prépare l’affichage👉 Pas de boucle inutile
Chaque commande a une responsabilité claire :
C’est exactement ce type de pipeline que l’on retrouve dans :
Get-ChildItem "C:\Test" -File |
Where-Object { $_.Length -gt 100MB } |
Sort-Object Length -Descending |
Select-Object Name, Length
En PowerShell, on privilégie le pipeline et les cmdlets spécialisées plutôt que les boucles
foreach, sauf quand c’est réellement nécessaire.
$cartesActives = Get-NetAdapter | Where-Object { $_.Status -eq "Up" }
if ($cartesActives.Count -eq 0) {
Write-Host "Aucune carte réseau active" -ForegroundColor Red
}
else {
foreach ($carte in $cartesActives) {
Write-Host "$($carte.Name) : $($carte.Status)"
}
}
$limiteCPU = 10
$processus = Get-Process | Where-Object { $_.CPU -gt $limiteCPU }
foreach ($p in $processus) {
Write-Host "$($p.Name) - CPU : $($p.CPU)"
}
function Tester-TailleFichier {
param (
$chemin
)
if (Test-Path $chemin) {
$fichier = Get-Item $chemin
if ($fichier.Length -lt 1MB) {
Write-Host "$($fichier.Name) : OK" -ForegroundColor Green
}
else {
Write-Host "$($fichier.Name) : TROP VOLUMINEUX" -ForegroundColor Red
}
}
else {
Write-Host "Fichier introuvable : $chemin" -ForegroundColor Yellow
}
}
Tester-TailleFichier "test1.txt"
Tester-TailleFichier "test2.txt"
$fichiersVolumineux |
Select-Object Name,
@{ Name = "Taille"; Expression = { "{0:N2} MB" -f ($_.Length / 1MB) } }
$_Représente le fichier courant dans le pipeline.
$_ .LengthTaille du fichier en octets.
/ 1MBConversion automatique en mégaoctets (1MB = 1 048 576 octets).
"{0:N2} MB" -f ..."MB"| Name | Taille |
|---|---|
| video.mp4 | 223.45 MB |
| backup.iso | 1389.72 MB |
$fichiersVolumineux |
Select-Object Name,
@{
Name = "Taille"
Expression = {
if ($_.Length -ge 1GB) {
"{0:N2} GB" -f ($_.Length / 1GB)
}
elseif ($_.Length -ge 1MB) {
"{0:N2} MB" -f ($_.Length / 1MB)
}
else {
"{0:N2} KB" -f ($_.Length / 1KB)
}
}
}
Le formatage est fait :
Pour afficher une valeur formatée dans PowerShell, on utilise Select-Object avec une propriété calculée.
$cartes = Get-NetAdapter | Where-Object { $_.Status -eq "Up" }
$cartes |
Select-Object Name, MacAddress, LinkSpeed |
Export-Csv "reseau.csv" -NoTypeInformation
Write-Host "Fichier reseau.csv créé avec succès" -ForegroundColor Green
Write-Host est utilisé uniquement pour l’affichage utilisateurWrite-Host